【Java】HashSet、LinkedHashSet、TreeSetの違い

当ページのリンクには広告が含まれています。
目次

概要

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

Setの種類

HashSet(順序なし)

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

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

LinkedHashSet(順序を維持)

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

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

TreeSet(順序あり)

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

  • 自然順序
    • 順序付けを指定しない場合、デフォルトで自然順序(数値なら小さい値から、アルファベットならAからで)並べられます。
  • 独自の順序付け
    • Comparatorを使用することで、独自の並び順を指定することも可能です

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

性能について

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

参考:遅くならないの?

まとめ

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

最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

リーマンショックの影響で26歳の時にIT業界から離れ、紆余曲折を経て34歳でエンジニアに復帰。
現在はフリーランスエンジニア兼コアファクトリ合同会社代表。
得意な言語はJava。

新人教育経験あり(わからなくて進まない子を放置しない方針)
Javaの新人教育にお困りでしたらお声がけください。

■保有資格
・Java Gold SE 11

コメント

コメントする

CAPTCHA


目次