0

内部的に HashMap にはhash()メソッドがあり、特別な関数を適用することで、不適切に記述されたハッシュ コードを防御します。次のステップは、hash()メソッドによって返された値を使用して、 new Entry がtableというバッキング配列内に格納されるインデックスを計算することです。2 つの異なるキーのインデックスが同じである場合があります。そのリンクされたリストが使用されていますが、それは私には明らかです。

バッキング テーブルのインデックスが 2 つの異なるキーで同じになるのはなぜですか?

ハッシュコードのオーバーライドが不十分になる可能性があることは知っていますが、メソッドhash()は、ハッシュコードの衝突から保護すると述べています。では、なぜバッキング テーブルのインデックスが同じになるのでしょうか。

EDIT返信してくれてありがとう。@Dunkan Jones のサイズ変更は、HashMap に入れる要素の量 ( size ) がしきい値 (コンストラクターで提供される initialCapacity および loadFactor に従って計算) 以上の場合に自動的に行われます。メソッド createEntry を調べます。新しいエントリが作成されるたびにサイズが増加します。私の質問は、 hash() メソッド + indexFor() メソッドが異なるオブジェクトに対して同じインデックスを一緒に返すのはなぜですか。この同じインデックスにより、リンクされたリストによって 2 つのエントリが同じバケットに配置されます。

hash() + indexFor() メソッドが同じインデックスを返す原因は何ですか?

これらのトリッキーな >>> および & 演算子によって hash() および indexFor() が何をするのか、私は考え、理解できませんか?

HashMap でのハッシングとは?

再度、感謝します!

4

2 に答える 2