【问题标题】:How LinkedHashMap maintains order if two or many objects get stored in the same index如果两个或多个对象存储在同一个索引中,LinkedHashMap 如何保持顺序
【发布时间】:2018-07-18 02:37:29
【问题描述】:

如果两个或多个对象存储在同一个索引中,LinkedHashMap 如何保持顺序

如果链表中的两个元素找到相同的哈希码,那么它们将存储在相同的索引但不同的节点中。这种情况下如何找到正确的顺序。

假设第一个元素位于索引 2,第二个元素位于索引 3,第三个元素也位于索引 3,第四个元素位于索引 2,第五个元素位于索引 3,基于哈希码。

这种情况下它是如何维护插入顺序的??

【问题讨论】:

  • 看源码。简短的回答是有一个 second 链接列表,它按所需顺序链接所有条目。
  • 我不明白这个问题。为什么它们存储在同一个存储桶中的事实会使维护秩序变得更加困难?

标签: java collections linkedhashmap


【解决方案1】:

LinkedHashMapHashMapLinkedList 的组合。

HashMap 允许快速查找。
LinkedList 维护插入顺序。

阅读文档,即javadoc,其中解释了这一点:

哈希表链表实现Map接口,具有可预测的迭代顺序。此实现与HashMap 的不同之处在于它维护一个双向链表,该列表贯穿其所有条目。这个链表定义了迭代顺序,通常是键插入映射的顺序(insertion-order)。请注意,如果将键重新插入到地图中,则插入顺序不会受到影响。 (如果在调用 m.containsKey(k) 将在调用之前立即返回 true 时调用 m.put(k, v),则键 k 将重新插入映射 m。)

请不要将维护落入同一哈希桶的键的数据结构(通常是链表)与用于维护插入顺序的链表混淆。它们彼此完全不同。此外,HashMap 的最新版本使用树结构而不是简单的链表来维护哈希桶中的键。

【讨论】:

    猜你喜欢
    • 2018-02-23
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多