在 LinkedHashMap 上迭代 keySet() 会使用插入顺序吗?

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

我无法在文档中确认这一点,但如果我有一个

LinkedHashMap
并且我在其上调用
keySet()
并迭代此集合,是否可以保证按插入顺序进行迭代?

java linkedhashmap
2个回答
3
投票

Map
文档中指定:

Map
界面提供了三个集合视图,允许将映射的内容视为一组键、值集合或键值映射集。映射的顺序定义为映射集合视图上的迭代器返回其元素的顺序。一些映射实现,例如
TreeMap
类,对其顺序做出了具体保证;其他类(例如 HashMap 类)则不然。

这意味着对于

LinkedHashMap
,所有 3 个方法 -
values()
keySet()
entrySet()
,每个方法都提供 3 个不同的集合视图,保证按插入顺序进行迭代。


2
投票

是的。 请参阅此处的文档(您看不到):http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html

Map接口的哈希表和链表实现,带有 可预测的迭代顺序。这个实现与HashMap不同 因为它维护着一个贯穿其所有元素的双向链表 条目。这个链表定义了迭代顺序,即 通常是键插入映射的顺序 (插入顺序)。请注意,如果某个键插入顺序不受影响 被重新插入到地图中。 (密钥 k 被重新插入到映射 m 中,如果 当 m.containsKey(k) 返回 true 时调用 m.put(k, v) 就在调用之前。)

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