在阅读HashMap
时,我发现它是作为一个桶阵列实现的?现在这些桶总是链接列表吗?如果是这样,为什么他们被称为桶而不是链表?
答案 0 :(得分:3)
查看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”是一个更高级别的术语,在文献和解释哈希映射时使用。这里“桶”作为单个链表实现。
答案 1 :(得分:3)
在Java的Hashmap中,存储桶实现为链接列表(每个Entry
都引用另一个名为next
的条目。
术语“桶”是指一个概念。链接列表实现细节。
答案 2 :(得分:0)
Java,使用“Seperate Chaining”的概念,将其实现为链接列表数组,以避免冲突。 但是,情况并非总是如此。哈希映射可以完全实现为数组(线性探测);这虽然有更高的机会创造一个分裂。
关于你的“水桶”问题。您可以将链接列表想象为存储桶。但是,如果您的HashMap实现使用适当的HashFunction(在hashmap数组中分配您的值的算法),您的“桶”最好只有一个项目。