ハッシュテーブル(Hashtable や Dictionary など)に要素を追加するには必ずキーが必要になります。そのキーの値にはハッシュコードを使用しています。ハッシュコードはハッシュアルゴリズムなどを使用して求められますが、必ず一意な値を返すわけではありません。つまり、衝突する可能性があるということです。もしハッシュテーブルに要素を追加していく過程で、ハッシュコードが衝突したら例外が発生してしまうのではないでしょうか。それを考えると怖くて怖くてハッシュテーブルが使えません。

 このままではいけないので、本当にハッシュコードが衝突すると例外が発生するのかいろいろ実験してみました。するとハッシュコードが一致するだけでは例外が発生しませんでした。どうやらハッシュコードが同じでもオブジェクト同士が等しくない場合は、ハッシュテーブルに要素を追加することが出来るようです。キーの比較には少なくとも「オブジェクト同士が等しい」、「ハッシュコードが等しい」という二つの条件が組み合わされているようです。

 ということが実験してわかったのですが、MSDN の Hashtable クラスのコンストラクタの説明をよく見てみるとそれらしいことが書いてありました。

ハッシュ コード プロバイダは、Hashtable オブジェクト内のキーにハッシュ コードを提供します。既定のハッシュ コード プロバイダは、キーの Object.GetHashCode の実装です。

比較演算子は 2 つのキーが等しいかどうかを判断します。Hashtable 内のすべてのキーは一意である必要があります。既定の比較演算子は、キーの Object.Equals の実装です。

 これで安心しました。これからは思いっきりハッシュテーブルを使用したいと思います。