リファクタリング プログラミング Java

【Java】重複しないリストはSetを使う!(用途別 3種類)

投稿日:

概要

重複しないリストは、「Setに格納することで重複を除外してくれる」というのは多くの記事で紹介されています。
ここでは、Setに格納した後のデータの並び順も考慮したいという要件に対応するために、3種類のSetを紹介します。

Setの種類

HashSet(順序なし)

通常のSetです。
データの並び順は保証されていないので、
ただ単純に重複を除外したい場合に使用します。

参考:【Java】HashSetの使い方(順序なしSet)

LinkedHashSet(順序を維持)

挿入順を保証するSetです。
データの並び順を維持したい場合に使用します。

参考:【Java】LinkedHashSetの使い方(挿入順を保持するSet)

TreeSet(順序あり)

順序付けされるSetです。
データを順序付け(※1※2)した結果で保持したい場合に使用します。

  • ※1. 自然順序
  • 順序付けを指定しない場合、デフォルトで自然順序(数値なら小さい値から、アルファベットならAからで)並べられます。

  • ※2. 独自の順序付け
  • Comparatorを使用することで、独自の並び順を指定することも可能です

参考:【Java】TreeSetの使い方(順序付けSet)

性能について

Listをforでループして重複を除外する方法と、Setに格納した場合でどちらの方が処理性能が高いかを検証した記事がありましたので、参考までに紹介します。
性能比較はHashSetのみですが、HashSetの方が概ね1.2~1.3倍速いという結果だったようです。

参考:遅くならないの?

まとめ

  • Setは重複を除外したリストである。
  • Setには、順序なし、順序を維持、順序ありのSetが用意されている。
  • Setを使うことで処理性能が落ちるわけではないので、積極的に使ってよい。

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-リファクタリング, プログラミング, Java
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

if文をネスト(入れ子)させずにコードを書く方法

if文をネスト(入れ子)させずにコーディングする1つの方法です。 私が好んで使うパターンを紹介します。   基本的なパターン 1.デフォルト値を設定。 2.if文は、デフォルト値と異なる場合 …

pageEncodingとcontentTypeのcharsetの違い

pageEncodingとcontentTypeのcharsetは処理されるタイミングが異なります。 それによって文字化けの原因につながっているので、どのように設定すればいいかを解説していきます。 違 …

【Laravel】SQLの確認はenableQueryLogを使う

SQLのデバッグのために、SQLとバインドされた値を確認したいことがあります。 その時に使える方法として、よく提示されるのは以下の2つです。 1.enableQueryLogメソッドとgetQuery …

エンジニア未経験者の転職が難しくなったので解決策を提案してみる

現状 コロナ以降、未経験者のエンジニア採用が少しずつなくなっていきました。 それまではポートフォリオを作ったり、ある程度のポテンシャルがあると判断されれば 採用されるということがあったのですが、それが …

Eclipseでタブを半角スペースに変換する便利プラグイン!

Eclipseでタブを半角スペースに変換する便利プラグインに、 AnyEdit Toolsというものがあります。 導入方法を以下に記載致しましたので参考にして下さい。   どういうものか? …

記事を探す

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。