這是Java HashTable Class的hashCode()實現。如果散列表中元素的數量很大,散列碼超過INTEGER MAX LIMIT -2,147,483,648至2,147,483,647,該怎麼辦?我假設hashCodes將是正整數。如果計算的散列碼超過INTEGER MAX LIMIT,會發生什麼情況?
public synchronized int hashCode() {
int h = 0;
if (count == 0 || loadFactor < 0)
return h; // Returns zero
loadFactor = -loadFactor; // Mark hashCode computation in progress
Entry[] tab = table;
for (int i = 0; i < tab.length; i++)
for (Entry e = tab[i]; e != null; e = e.next)
h += e.key.hashCode()^e.value.hashCode();
loadFactor = -loadFactor; // Mark hashCode computation complete
return h;
}
高於int類型限制(32位)的位將被丟棄。 – nhahtdh
「如果散列表中元素的數量很大」呢?它是什麼 - 哈希表必須處理碰撞。沒有要求,也不保證哈希碼是唯一的(事實上,不可能有這樣的保證) –
'的System.out.println(「是否散列碼總是積極?」的hashCode());''打印-835520151';) –