リファクタリング プログラミング 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】MySQLから取得した日付をフォーマット変換して表示する方法

MySQLからSELECTしてきた日付データ(DateTime型)を、 「yyyy年MM月dd日 hh時mm分ss秒」のフォーマットで表示する方法です。 コード [crayon-63d7cc405d5 …

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

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

難しい,困難,頭を抱える

オブジェクト指向が難しいと思うならこれを読め!

オブジェクト指向はJava、JavaScript、PHP、Python、Rubyなどなど 色んな言語で使われているパラダイム(考え方)です。 上から順に追っていくだけ(手続き型)ではわからない仕組みに …

no image

XSS対策の基本は入力値制限とサニタイジング(無害化)の2つ

XSS(クロスサイトスクリプティング)の基本的な対策は何をすればいいのかがぼんやりしている方向けの書いています。 対策方法はタイトルの通り、XSS(クロスサイトスクリプティング)対策の基本は入力値制限 …

SpringFramworkの良書

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

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