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

【Java】HashSet、LinkedHashSet、TreeSetの違い

投稿日:2021年4月24日 更新日:

概要

重複しないリストは、「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


関連記事

【Java入門】プロジェクトの作成からHello, World!まで

概要 プログラミングの入門といえば「Hello, World!」です。 まずは最も簡単なプログラムを動かすことから始めていきましょう。   プロジェクトの作成 新規プロジェクト作成 新規で「Javaプ …

【Java】MapをStreamで処理する方法 7選!

概要 【Java】ListをStreamで処理する方法 7選! 【Java】SetをStreamで処理する方法 7選! に続き、Map編です。 Mapをstreamで扱う場合、entrySetまたはK …

【Javaサンプル】自動販売機(Level4) ドメイン駆動

前回(Level3) Level3ではクラス分けすることを行いました。 しかし、私の目指すところのドメイン駆動開発になっていません。 また、ロジックもまだまだ複雑さが残っており、ぱっと見て何をやってい …

【Java入門】インターフェースの使い方まとめ

概要 インターフェースとは、内部実装を知る必要なく、利用する機能の接点のみを提供する仕組みです。 接点をソフトウェア的にいうと、メソッドのシグネチャと戻り値の型に当たります。 つまり、どんなメソッドに …

オブジェクト指向とは何なのかを簡単に説明してみる

オブジェクト指向とは何なのか? これを私の理解を元に、ごくごく簡単に説明してみたいと思います。   オブジェクト指向とは? オブジェクト指向とは何かを説明するために、 「オブジェクト」と「指 …

SpringFramworkの良書

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

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