2013-12-21 56 views
1

我想了解Java中HashMap的內部實現。我對'createEntry'方法感到困惑。混淆Java HashMap createEntry方法

void createEntry(int hash, K key, V value, int bucketIndex) { 
    Entry<K,V> e = table[bucketIndex]; 
    table[bucketIndex] = new Entry<>(hash, key, value, e); 
    size++; 
} 

它創建了一個條目對象的「e」,然後將其它把另一個條目對象,並將其存儲到水桶[bucketindex]和它也存儲的鍵和值。我無法理解這裏創建Entry對象'e'的目的。有人能解釋一下嗎?

問候

+0

的http:// en.wikipedia.org/wiki/Hashtable#Separate_chaining –

+2

'table [bucketIndex]'不*創建*條目。它*獲取存儲在'table'中'bucketIndex'索引處的條目。這是一個簡單的鏈接列表,其中新節點成爲列表的第一個節點。 –

+0

(請注意,OpenJDK8代碼非常不同。) –

回答

6

它得到桶中的一個條目(哪怕是null)。然後它創建一個新條目,將其next條目設置爲檢索到的那個條目。然後它將新條目設置爲存儲桶中的相同索引。

所以說你有哈希

0: [null] 
1: [some entry] 
2: [null] 

3元,你不得不添加到索引1

0: [null] 
1: [new entry] -> [some entry] 
2: [null] 

同樣,添加到索引0

0: [newer entry] -> [null] 
1: [new entry] -> [some entry] 
2: [null]