LinkedHashMap集合视图的迭代顺序

问题描述 投票:0回答:2

在阅读了

LinkedHashMap
的文档(并使用过几次)之后,我仍然不清楚它的其中一个属性。 是
LinkedHashMap
:

的迭代顺序
  1. entrySet()
    keySet()
    values()
    的插入顺序相同,或
  2. entrySet()
    keySet()
    的插入顺序相同,但与
    values()
  3. 不同
  4. 仅与
    entrySet()
    的插入顺序相同?

我认为第三种情况不太可能,但我想知道是否有人知道 (1) 或 (2) 是否为真,因为

values()
上的迭代可能是一个罕见的用例。

java hashmap linkedhashmap
2个回答
4
投票

LinkedHashMap
尊重插入顺序;所以第一选择是好的。

A

Map
是一组
Map.Entry
对象,选项 2 和 3 会很奇怪;)


0
投票

LinkedHashMap 类中这些方法的

Java 21
文档对于顺序比 Java 的早期版本更加明确。 很明显,这三个都使用相同的顺序 - 地图的遭遇顺序。

  • entrySet
    :“视图的遭遇顺序与此地图的条目的遭遇顺序相匹配。”
  • keySet
    :“视图中键的遇到顺序与此地图的映射的遇到顺序相匹配。”
  • values
    :“视图中值的遇到顺序与此映射中条目的遇到顺序相匹配。”

只要地图不是作为访问顺序创建的

LinkedHashMap
(使用特殊的访问顺序构造函数),它的遭遇顺序将按照插入顺序。

因此,从 Java 21 开始,答案已明确记录,是的,

entrySet
keySet
values
将以标准 a
LinkedHashMap
的插入顺序返回其元素。

Java 的早期版本确实具有相同的行为,但相关文档不太明确。

因此,无论 Java 版本如何,这三个方法的顺序都是相同的(除了特定的特殊访问顺序

LinkedHashMap
实例)按插入顺序。

© www.soinside.com 2019 - 2024. All rights reserved.