Java hashMap是否实现为链表数组

Java hashMap是否实现为链表数组,java,hashmap,Java,Hashmap,在阅读有关HashMap的文章时,我看到它是作为一个bucket数组实现的?现在这些桶总是链表吗?如果是这样,为什么它们被称为bucket而不是链表?查看的源代码告诉我们,它是作为一个条目数组实现的: transient Entry[] table; 每个条目都有一个字段next,因此它们创建一个单一的链表结构: static class Entry<K,V> implements Map.Entry<K,V> { final K key; V valu

在阅读有关HashMap的文章时,我看到它是作为一个bucket数组实现的?现在这些桶总是链表吗?如果是这样,为什么它们被称为bucket而不是链表?

查看的源代码告诉我们,它是作为一个条目数组实现的:

transient Entry[] table;
每个条目都有一个字段
next
,因此它们创建一个单一的链表结构:

static class Entry<K,V> implements Map.Entry<K,V> {
    final K key;
    V value;
    Entry<K,V> next;
静态类条目实现Map.Entry{
最终K键;
V值;
进入下一步;

“Bucket”是一个更高级的术语,在文献中和解释哈希映射时使用。在这里,“Bucket”被实现为一个单一的链表。

在Java的哈希映射中,Bucket被实现为一个链表(每个
条目
都引用另一个名为
下一个
的条目)

术语“bucket”指的是一个概念。链表是一个实现细节。

Java使用“分离链接”的概念,将其实现为一个链表数组,以避免冲突。 不过,情况并非总是如此。哈希映射可以完全实现为一个数组(线性探测);尽管如此,创建共点的可能性更高


关于你的“bucket”问题,你可以把链表想象成一个bucket。但是,如果你的HashMap实现使用了合适的HashFunction(在HashMap数组中分配值的算法),你的“bucket”最好只有一项。

这是什么编程语言?怀疑Java这种假设导致了著名的DoS攻击()。回想起来,链表是bucket实现的糟糕选择,但Java不会改变它。