我读到 HashMap 具有以下实现:
main array
↓
[Entry] → Entry → Entry ← linked-list implementation
[Entry]
[Entry] → Entry
[Entry]
[null ]
因此,它有一个 Entry 对象数组。
问题:
我想知道在 hashCode 相同但对象不同的情况下,该数组的索引如何存储多个 Entry 对象。
这与
LinkedHashMap
实施有何不同?它是 map 的双向链表实现,但它是否像上面那样维护一个数组,它如何存储指向下一个和上一个元素的指针?
原文由 Mercenary 发布,翻译遵循 CC BY-SA 4.0 许可协议
不完全是。它有一个数组
Entry
对象 _链_。HashMap.Entry
对象有一个next
字段允许Entry
对象被链接为链表。因为(如您问题中的图片所示)
Entry
对象是链接的。In the
LinkedHashMap
implementation, theLinkedHashMap.Entry
class extends theHashMap.Entry
class, by addingbefore
andafter
fields.这些字段用于将LinkedHashMap.Entry
对象组装成一个独立的双向链表,记录插入顺序。因此,在LinkedHashMap
类中,每个条目对象位于两个不同的链中:有许多通过主哈希数组访问的单链接哈希链。这用于(常规)哈希图查找。
有一个单独的双向链表,其中包含所有条目对象。它按条目插入顺序保存,并在您迭代哈希图中的条目、键或值时使用。