1. ホーム
  2. c#

[解決済み] 定義 HashSetとは何ですか?

2022-03-24 04:58:41

質問

ハッシュセット C#のHashSetデータ構造は、.NET Framework 3.5で導入されました。実装されているメンバーの完全なリストは、以下のサイトにあります。 ハッシュセット MSDN のページをご覧ください。

  1. どこで使われているのですか?
  2. なぜそれを使いたいのですか?

どのように解決するのですか?

    1. A HashSet はオブジェクトのセットを保持しますが、あるオブジェクトがすでにセットに入っているかどうかを簡単かつ迅速に判断できるような方法で保持します。これは、内部で配列を管理し、オブジェクトのハッシュコードから計算されるインデックスを使用してオブジェクトを格納することによって行われます。 ここで見てみましょう

    2. HashSet は一意な要素を含む非順序型コレクションである。標準的なコレクション操作であるAdd, Remove, Containsを備えているが、ハッシュベースの実装を使用しているため、これらの操作はO(1)である。(例えばListがContainsとRemoveでO(n)であるのとは対照的である)。 HashSet のような標準的な集合演算も提供します。 ユニオン , 交差点 および 対称的な差 . ここで見てみましょう

  1. Setsにはさまざまな実装があります。要素をハッシュ化することで、挿入や検索を高速に行うものもある。しかし、その場合、要素が追加された順番は失われることになる。他の実装では、実行時間が遅くなる代償として、追加された順序が維持されます。

HashSet のクラスは、最初のアプローチに進みます。 ではなく 要素の順序を保持する。これは、通常の List . いくつかの基本的なベンチマークでは,一次型 (int, double, bool など) を扱う場合,HashSet はそこそこ高速であることが示されました.クラス・オブジェクトを扱う場合は、もっと速い。つまり、HashSetは速いということです。

の唯一の欠点は HashSet は、インデックスによるアクセスができないことです。要素にアクセスするには、列挙子を使うか、組み込み関数を使って HashSet に変換してください。 List を作成し、それを繰り返し実行します。 ここで見てみましょう