1

HashMap の add メソッドは、HashMap 内のキーの場所をどのように決定しますか? たとえば、「S」、「T」、「A」、「C」、「K」をサイズ 10 の HashMap に入れようとした場合、各文字の位置はどのように決定されるのでしょうか?

4

1 に答える 1

4

オブジェクトのハッシュ コードの最下位ビットは、バケットの選択に使用されます。サイズが 10 の java.util.HashMap は存在しないことに注意してください。バケットを選択するためにビットをマスクできるように、サイズは 2 の累乗でなければなりません。コンストラクターに 10 を渡すと、16 バケットの HashMap が返されます。

したがって、わかりやすくするために8ビットに減らします。「S」がハッシュコード123を返す場合、Javaで十分です

01111011 & 00001111 -> 00001011

S をバケット 11 に入れます。

実際のハッシュ マップは、ビットを右にシフトする 2 次ハッシュ関数も適用して、最下位ビットに何らかのエントロピーを持つデータがあることを確認します。これにより、hashCode 関数がそれほど大きくなくても、物事が均等に分散される可能性が高くなります。

于 2013-04-03T18:13:35.447 に答える