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> クラスは、一意の要素を格納するための順序付けられていないコレクションです。 このコレクションの詳細については、「HashSet コレクション型」を参照してください。

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

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

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

たとえば、文字列用のハッシュ関数は、文字列内の各文字の ASCII コードを取り出し、それらを組み合わせてハッシュ コードを生成します。 文字列 "picnic" には、文字列 "basket" のハッシュ コードとは異なるハッシュ コードが生成されます。このため、"picnic" と "basket" の各文字列は、異なるバケットに格納されます。 一方、"stressed" と "desserts" には同じハッシュ コードが生成され、どちらも同じバケットに格納されます。

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

参照

参照

Hashtable

IDictionary

IHashCodeProvider

Dictionary<TKey, TValue>

System.Collections.Generic.IDictionary<TKey, TValue>

System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue>

概念

HashSet コレクション型

その他の技術情報

一般的に使用されるコレクション型