リファクタリング プログラミング 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】配列の扱い方(初期化、追加、ソート、List変換など)

配列とは? ザックリ言うと、同じ種類の複数データを1つの変数に持つことができる仕組みです。 でも文字だけだとわかりずらいですよね💦 なので以下のコードを確認してみて下さい。 [crayon-64765 …

no image

PHPの開発環境の作り方

前提 OS:Windows10 準備 XAMPPのダウンロード https://www.apachefriends.org/jp/download.html 構築 XAMPPのインストール インストー …

【Javaポートフォリオ】なぜスクレイピングツールがおすすめか?

なぜスクレイピングツールか? ・スキルに需要がある ・総合的なスキルが身に付く ・個人開発に応用できる スキルに需要がある 執筆時点(2021年3月28日)時点で、ランサーズに1643件の発注がありま …

【Java】ArrayListの最長文字列を取得する簡単な方法

(追記)2020/08/19 1. Listが空の場合(NoSuchElementException)に対応しました。 2. Nullが含まれていた場合、空文字として扱うように修正しました。 Arra …

AWSへWebアプリケーション(Java)をデプロイする方法(書籍紹介)

対象者 ・個人開発者 ・ポートフォリオ作成者 手順 こちらの書籍を参考に私自身がAWSにデプロイした手順です。 書籍では図解もあってわかり易く解説されているので、ここでは流れを簡潔に説明します。 すで …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

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

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