HashSet C# HashSetデータ構造は.NET Framework 3.5で導入されました。実装されたメンバーの完全なリストは、ハッシュセット MSDNページ。
- どこで使われていますか?
- なぜそれを使いたいのですか?
ベストアンサー1
-
- A は
HashSet
オブジェクトのセットを保持しますが、オブジェクトがセット内に既に存在するかどうかを簡単かつ迅速に判断できるような方法で保持します。これは、配列を内部的に管理し、オブジェクトのハッシュコードから計算されたインデックスを使用してオブジェクトを格納することによって行われます。こちらをご覧ください
- A は
HashSet
は、一意の要素を含む順序付けされていないコレクションです。標準的なコレクション操作である Add、Remove、Contains を備えていますが、ハッシュベースの実装を使用しているため、これらの操作は O(1) です。(Contains と Remove に対して O(n) である List などとは対照的です。)また、和集合、積集合、対称差HashSet
などの標準的な集合操作も提供します。こちらをご覧くださいSet にはさまざまな実装があります。要素をハッシュすることで挿入と検索の操作を超高速化するものもあります。ただし、これは要素が追加された順序が失われることを意味します。その他の実装では、実行時間が遅くなるという代償を払って追加された順序が保持されます。
C# のクラスHashSet
は最初のアプローチを採用しているため、要素の順序は保持されませんList
。これは通常の よりもはるかに高速です。いくつかの基本的なベンチマークでは、HashSet はプライマリ タイプ (int、double、bool など) を処理するときにかなり高速であることが示されました。クラス オブジェクトを操作する場合は、はるかに高速です。つまり、HashSet は高速であるということです。
の唯一の欠点HashSet
は、インデックスによるアクセスがないことです。要素にアクセスするには、列挙子を使用するか、組み込み関数を使用して をHashSet
に変換しList
、それを反復処理します。こちらをご覧ください