我在讀的是關於HashMap
如何工作的事實java
。我發現hash
方法中的代碼在HashMap
類中hashcode
是Shift right zero fill operator
的一個操作數。其他operands
就像12
7
4
20
。後來一些處理的結果進行。我的問題是,爲什麼只有這四個數chossen用於計算可實際用於計算在桶中的位置哈希函數值爲什麼數字像4,20,12,7用在散列函數中'HashMap Class`
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
static int hash(int h) {
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20)^(h >>> 12);
return h^(h >>> 7)^(h >>> 4);
}
請參閱[這個問題](http://stackoverflow.com/questions/9335169/understanding-strange-java-hash-function) –