如果两个或多个对象存储在同一索引中,LinkedHashMap如何维持秩序
如果linkedlist中的两个元素找到了相同的哈希代码,那么它们将存储在相同的索引中,但节点不同。在这种情况下,它将如何找到正确的顺序。
假设第一个元素位于索引2,第二个元素位于索引号3,第三个元素也位于索引3,第四个元素位于下标2,第五个元素位于基于哈希码的索引3。
在这种情况下,它是如何维护插入顺序的??
LinkedHashMap
是HashMap
和LinkedList
的组合。
HashMap
允许快速查找LinkedList
维护插入顺序。
阅读文档,即javadoc,它解释了这一点:
哈希表和链表
Map
接口的实现,具有可预测的迭代顺序。此实现与HashMap
的不同之处在于,它维护了一个贯穿其所有条目的双链表。该链表定义迭代顺序,通常是将键插入映射的顺序(插入顺序(。请注意,如果键被重新插入到映射中,则插入顺序不受影响。(如果m.put(k, v)
被调用,则密钥k
被重新插入到映射m
中,而m.containsKey(k)
将在调用之前立即返回true
。(
请不要将维护属于同一哈希桶的键的数据结构(通常是链表(与用于维护插入顺序的链表混淆。他们彼此完全不同。此外,最近版本的HashMap
使用树结构,而不是简单的链表,来维护哈希桶中的密钥。