Share via


Hashtable コレクション型

Hashtable クラスは、IDictionary インターフェイスに基づいているため、このコレクションの各要素は、キーと値の組み合わせになります。

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

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

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

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

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

参照

汎用コレクション | Hashtable | IDictionary | IHashCodeProvider