hashMap是否作为链表列表实现

时间:2013-08-23 19:53:32

标签: java hashmap

在阅读HashMap时,我发现它是作为一个桶阵列实现的?现在这些桶总是链接列表吗?如果是这样,为什么他们被称为桶而不是链表?

3 个答案:

答案 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数组中分配您的值的算法),您的“桶”最好只有一个项目。