等しくない2つのオブジェクトが同じハッシュコードを持つことは完全に合法ですが、等しい2つのオブジェクトが異なるハッシュコードを持つことは無効です。
ディクショナリスタイルのコレクションクラスは、ハッシュコード値(キーとして指定されたオブジェクトから返されるGetHashCode値)を使用して、キーと値のペアをハッシュビンに入れます。キーのハッシュコード値が同じであるすべてのキー/値ペアは、同じハッシュビンに入ります。ハッシュコードの生成が効果的である場合、辞書内の空でない各ハッシュビンには、キーと値のペアが非常に少ない(できれば1つだけ)ことを意味します。
オブジェクトをキーとして指定してディクショナリのコンテンツにアクセスする場合、返される正しい値を見つけるための疑似ロジックは次のとおりです。
- リクエストでキーとして指定されたオブジェクトのハッシュコード値を取得します(GetHashCode())
- そのハッシュコードに空でないハッシュビンがある場合は、そのハッシュビン内のすべてのキー/値ペアのキーオブジェクトを反復処理します。ハッシュビン内のキーと値のペアごとに、キーオブジェクトEquals()がリクエストへのキーとして渡されたオブジェクトであるかどうかを確認します。その場合、そのキーと値のペアでValueオブジェクトを返します。
これにより、リストスタイルのコレクションでオブジェクトを検索する場合と比較して、辞書の検索が非常に効果的になります(ハッシュコードの分散が良好な場合)。