「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > HashSet の探索: 順序付けされていないコレクションの詳細

HashSet の探索: 順序付けされていないコレクションの詳細

2024 年 11 月 8 日に公開
ブラウズ:443

Exploring HashSet: A Dive into Unordered Collections

導入

HashSet クラスは Java Collections Framework の一部であり、要素の重複を許可しない高速で順序付けされていないコレクションを提供します。これは HashMap の上に構築されており、同じ時間計算量の利点を継承していますが、要素の一意性にのみ焦点を当てています。この記事では、HashSet の仕組み、HashSet のユニークな点、他のコレクションとの違いについて説明します。


ハッシュセットとは何ですか?

ハッシュセットは次のとおりです:

  • 順序なし: 要素には予測可能な順序がありません。
  • 一意: 重複する要素は無視されます。
  • HashMap によって内部的にサポートされる : HashMap を使用して要素を保存し、値を破棄しながら keys のみに焦点を当てます。
  • O(1) 平均時間計算量: 挿入、削除、検索などの操作は非常に効率的です。

1. ハッシュセットの初期化

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));

// Default constructor with default capacity 16
Set set = new HashSet();

説明:

  • Default Constructor: 初期容量 16 の HashSet を作成します。
  • Parameterized Constructor: 初期容量を指定できますが、capacity は size と同じではないことに注意してください。サイズは、セット内の実際の要素の数を指します。
  • コレクションの使用: HashSet はリストのようなコレクションから作成でき、一意の要素のみが確実に保持されます。

2. HashSet への要素の追加

set.add(1);
set.add(2);
set.add(1); // Duplicate value is ignored
System.out.println(set); // Output -> [1, 2]

説明:

  • add() メソッドは要素を HashSet に挿入します。
  • 重複した要素は無視されます。 1 を 2 回追加しようとすると、最初に出現した要素のみが保持されます。

重要なポイント

重複した値を無視するのではなく置換する必要がある場合、HashSet は正しい選択ではありません。これは、要素の一意性を優先するためです。


3. サイズと容量の確認

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);
System.out.println(setWithInitialCapacity.size()); // Output -> 0

setWithInitialCapacity の容量が 5 であっても、size は 0 です。サイズは初期容量ではなく、セット内に存在する 要素の数を反映するためです。容量は、要素が追加されると調整される内部ストレージ容量と考えることができます。


4. コレクションでの HashSet の使用

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));
System.out.println(setWithCollection); // Output -> [3, 4] or [4, 3]

説明:

  • リスト (4、4、3) には 3 つの要素 が指定されましたが、重複値 4 は破棄され、2 つの要素 (3 と 4) だけが残りました。
  • HashSet は挿入や自然な順序を維持しないため、要素の 順序は予測できません
並べ替えられた要素を保持する必要がある場合は、要素が

昇順で配置されるようにする TreeSet の使用を検討してください。


5. HashSet でのインデックス作成 – 可能ですか?

面接でよく聞かれる質問は、HashSet 内の要素の

インデックス を取得できるかどうかです。答えは、いいえです。HashSet は、リストや配列のようなインデックスベースの構造ではなく、ハッシュ メカニズムを使用して要素を格納するためです。


要点のまとめ

  1. 順序なしで一意: HashSet は重複を無視し、一意の要素のみを保持します。
  2. HashMap 上に構築: 内部 HashMap のキーを使用して要素を保存します。
  3. 高速操作: 要素の追加、削除、チェックの平均時間計算量は O(1) です。
  4. 容量とサイズ: 容量は割り当てられたスペースであり、サイズは実際の要素数です。
  5. インデックスなし: ハッシュ メカニズムのため、インデックスによって要素を取得できません。

HashMapとの関係

HashSet は HashMap によってサポートされているため、マップの

キー を使用して要素を保存しますが、値は無関係です。これが、HashMap のキーと同様に、HashSet 内のすべての要素が一意である必要がある理由です。


結論

HashSet は、重複を避け、順序付けされていない高速なコレクションが必要な場合に強力なツールです。ほとんどの操作では

O(1) の時間計算量を提供しますが、並べ替えやインデックス作成などの機能がありません。開発者にとって、HashSet と HashMap の関係を知ることは、HashSet の内部動作を理解し、コレクション フレームワークをより有効に活用するのに役立ちます。

次の投稿では、候補者のコレクションの概念に関する知識をテストするために、面接でよく聞かれる

よくある面接の質問を見ていきます。


関連記事

  • Java の基礎

  • アレイ面接の必需品

  • Java メモリの基礎

コーディングを楽しんでください!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/arshisaxena26/exploring-hashset-a-dive-into-unowned-collections-4ehb?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3