2013-10-29 53 views
1

我讀過幾個論壇,但我仍然不明白hashCode()是如何計算的?何時?我在HashMap中讀到hashCode()這樣調用:hash(key.hashCode());HashTable,它是用密鑰和對計算的:h += e.key.hashCode()^e.value.hashCode();。它們在HashMapHashTable中的計算方式有何不同?在HashMap和HashTable中計算hashCode的工作方式是否有所不同?

hashCode()何時被調用?我認爲這發生在你嘗試做put(..)get(..)delete(..)

+0

您可以只看源代碼... –

+0

顯然,該值不能用於計算散列值。否則,get()方法如何工作以重新計算沒有任何值的散列? –

回答

1

您可能會混淆這裏的hashCode這兩種完全不同的用法,這兩種用法均存在於HashMapHashtable兩者中。

第一種內部方法(如putget)是計算一個鍵的散列以在條目表中查找條目。這就是hash(key.hashCode())正在做的事情。

第二是hashCode方法HashMapHashtable或本身,其被計算爲整個對象的單個散列內部。它使用表中每個鍵和值的散列值 - 這就是h += e.key.hashCode()^e.value.hashCode()正在做的事情。

+0

謝謝。現在我懂了! – Mercenary

2

的的keyhashCode()當你把一個項目到地圖中被調用:

public V put(K key, V value) { 
... 
int hash = hash(key.hashCode()); 
... 
} 

使之與指定key, value and hash code新條目可以被添加到指定的水桶。

當您嘗試檢索來自map對給定key一個value找到具有所需Entry桶它也被稱爲。同樣,如果您致電containsKey以檢查給定密鑰是否存在於map中,它將使用hashCode來查找包含Entrybucket

+0

感謝您的信息! – Mercenary

+0

@ user1739812不客氣。 –

相關問題