在阅读了
LinkedHashMap
的文档(并使用过几次)之后,我仍然不清楚它的其中一个属性。 是 LinkedHashMap
: 的迭代顺序
entrySet()
、keySet()
和 values()
的插入顺序相同,或entrySet()
和 keySet()
的插入顺序相同,但与 values()
或 entrySet()
的插入顺序相同?我认为第三种情况不太可能,但我想知道是否有人知道 (1) 或 (2) 是否为真,因为
values()
上的迭代可能是一个罕见的用例。
LinkedHashMap
尊重插入顺序;所以第一选择是好的。
A
Map
是一组 Map.Entry
对象,选项 2 和 3 会很奇怪;)
LinkedHashMap
类中这些方法的
Java 21文档对于顺序比 Java 的早期版本更加明确。 很明显,这三个都使用相同的顺序 - 地图的遭遇顺序。
entrySet
:“视图的遭遇顺序与此地图的条目的遭遇顺序相匹配。”keySet
:“视图中键的遇到顺序与此地图的映射的遇到顺序相匹配。”values
:“视图中值的遇到顺序与此映射中条目的遇到顺序相匹配。”只要地图不是作为访问顺序创建的
LinkedHashMap
(使用特殊的访问顺序构造函数),它的遭遇顺序将按照插入顺序。
因此,从 Java 21 开始,答案已明确记录,是的,
entrySet
、keySet
和 values
将以标准 a LinkedHashMap
的插入顺序返回其元素。
Java 的早期版本确实具有相同的行为,但相关文档不太明确。
因此,无论 Java 版本如何,这三个方法的顺序都是相同的(除了特定的特殊访问顺序
LinkedHashMap
实例)按插入顺序。