JavaのHashMapクラスを使用しています。私の理解では、ハッシュテーブルの容量はバケットの数の2乗である(容量16は4つのバケットを意味する)。 put(key、value)が呼び出されると、key.hashCode()はInteger数を出力し、この新たに追加された(key、value)の組はkey.hashCode()%バケット数に基づいて配置されます。しかし、次は、上記のコードからHashMap.classjavaのhash()実装
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode())^(h >>> 16);
}
の実際の実装である、私はバケットにkey.hashCode()値のフィッティングが起こるんどのように把握することはできませんよ。
あなたも(hashmap.classの)以前に添付したリンクを通過しました。 "それは"単に "ハッシュコードを広める"部分を詳しく教えてください。 – AV94
私は、それが小さい(<2^16エントリー)HashMapsの最適化だと考えています。上位ビットを広げないと、これらのマップでは無視されます。 –
さて、少し明確になりました。私は、ハッシュ値がバケットの数よりも多いとき、(n-1)&ハッシュがあなたに残りを与えると思います。 – AV94