次の方法で共有


Hashtable コレクション型と Dictionary コレクション型

System.Collections.Hashtable クラス、および System.Collections.Generic.Dictionary<TKey,TValue> および System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> ジェネリック クラスは、System.Collections.IDictionary インターフェイスを実装します。 Dictionary<TKey,TValue>ジェネリック クラスは、IDictionary<TKey,TValue>ジェネリック インターフェイスも実装します。 したがって、これらのコレクション内の各要素はキーと値のペアです。

Hashtable オブジェクトは、コレクションの要素を含むバケットで構成されます。 バケットは、 Hashtable内の要素の仮想サブグループであり、ほとんどのコレクションよりも簡単かつ迅速に検索および取得できます。 各バケットはハッシュ コードに関連付けられます。ハッシュ コードはハッシュ関数を使用して生成され、要素のキーに基づいています。

ジェネリック HashSet<T> クラスは、一意の要素を格納するための順序なしコレクションです。

ハッシュ関数は、キーに基づいて数値ハッシュ コードを返すアルゴリズムです。 キーは、格納されているオブジェクトのプロパティの値です。 ハッシュ関数は、常に同じキーに対して同じハッシュ コードを返す必要があります。 ハッシュ関数では 2 つの異なるキーに対して同じハッシュ コードを生成できますが、一意のキーごとに一意のハッシュ コードを生成するハッシュ関数を使用すると、ハッシュ テーブルから要素を取得するときのパフォーマンスが向上します。

Hashtableの要素として使用される各オブジェクトは、GetHashCode メソッドの実装を使用してそれ自体のハッシュ コードを生成できる必要があります。 ただし、Hashtable実装をパラメーターの 1 つとして受け入れるHashtable コンストラクターを使用して、IHashCodeProvider内のすべての要素に対してハッシュ関数を指定することもできます。

オブジェクトが Hashtableに追加されると、オブジェクトのハッシュ コードに一致するハッシュ コードに関連付けられているバケットに格納されます。 Hashtableで値を検索すると、その値のハッシュ コードが生成され、そのハッシュ コードに関連付けられているバケットが検索されます。

たとえば、文字列のハッシュ関数は、文字列内の各文字の ASCII コードを受け取り、それらを一緒に追加してハッシュ コードを生成する場合があります。 文字列 "picnic" には、文字列 "basket" のハッシュ コードとは異なるハッシュ コードが含まれます。したがって、文字列 "picnic" と "basket" は異なるバケット内にあります。 これに対し、"stressed" と "デザート" は同じハッシュ コードを持ち、同じバケット内にあります。

Dictionary<TKey,TValue>クラスとConcurrentDictionary<TKey,TValue> クラスには、Hashtable クラスと同じ機能があります。 (Dictionary<TKey,TValue> 以外の) 特定の型のObjectは、値型のHashtableよりも優れたパフォーマンスを提供します。 これは、 Hashtable の要素が Object型であるためです。したがって、ボックス化とボックス化解除は、通常、値型を格納または取得するときに発生します。 ConcurrentDictionary<TKey,TValue> クラスは、複数のスレッドがコレクションに同時にアクセスする可能性がある場合に使用する必要があります。

こちらも参照ください