在阅读HashMap
时我看到它是作为一个桶数组实现的?现在这些桶总是链表吗?如果是这样,为什么它们被称为桶而不是链表?
问问题
3378 次
3 回答
5
查看 的源代码HashMap
告诉我们它是作为一个 Entries 数组实现的:
transient Entry[] table;
每个 Entry 都有一个 field next
,因此它们创建了一个链表结构:
static class Entry<K,V> implements Map.Entry<K,V> {
final K key;
V value;
Entry<K,V> next;
“桶”是一个更高级别的术语,在文献中和解释哈希映射时使用。这里的“桶”被实现为单个链表。
于 2013-08-23T19:57:19.930 回答
4
在 Java 的 Hashmap 中,桶被实现为一个链表(每个Entry
都引用另一个名为 的条目next
)。
术语“桶”是指一个概念。链表实现细节。
于 2013-08-23T19:57:28.467 回答
0
Java,使用“分离链”的概念,它被实现为一个链表数组,以避免冲突。但是,情况并非总是如此。一个 hashmap 可以完全实现为一个数组(线性探测);这虽然有更高的机会产生碰撞。
关于你的“桶”问题。你可以把链表想象成一个桶。但是,如果您的 HashMap 实现使用适当的 HashFunction(在 hashmap 数组中分配值的算法),那么您的“桶”最好只有一个项目。
于 2013-08-23T20:11:57.183 回答