[英]Is hashMap implemented as an array of linked lists
在閱讀HashMap
我發現它是作為一個桶陣列實現的? 現在這些桶總是鏈接列表嗎? 如果是這樣,為什么他們被稱為桶而不是鏈表?
查看HashMap
的源代碼告訴我們它是作為一個條目數組實現的:
transient Entry[] table;
每個條目有一個字段next
,所以他們創造一個單鏈表結構:
static class Entry<K,V> implements Map.Entry<K,V> {
final K key;
V value;
Entry<K,V> next;
“Bucket”是一個更高級別的術語,在文獻和解釋哈希映射時使用。 這里“桶”實現為單個鏈表。
在Java的Hashmap中,存儲桶被實現為鏈接列表(每個Entry
都引用另一個名為next
條目)。
術語“桶”指的是概念。 鏈接列表實現細節。
Java,使用“Seperate Chaining”的概念,它被實現為鏈表的數組,以避免沖突。 但是,情況並非總是如此。 哈希映射可以完全實現為數組(線性探測); 這雖然有更高的機會創造一個colission。
關於你的“水桶”問題。 您可以將鏈接列表想象為存儲桶。 但是,如果您的HashMap實現使用適當的HashFunction(在hashmap數組中分配您的值的算法),您的“桶”最好只有一個項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.