0

我无法在文档中确认这一点,但如果我有一个 LinkedHashMap 并且我在它上面调用 keySet() 并迭代这个集合,它是否保证以插入顺序进行迭代?

4

2 回答 2

3

它在Map文档中指定:

Map接口提供了三个集合视图,允许将映射的内容视为一组键、值集合或键值映射集。地图的顺序定义为地图集合视图上的迭代器返回其元素的顺序。一些地图实现,比如TreeMap类,对它们的顺序做出特定的保证;其他的,比如 HashMap 类,不这样做。

这意味着对于LinkedHashMap,所有 3 种方法 -和values(),它们中的每一个都提供 3 个不同的集合视图,保证以插入顺序进行迭代。keySet()entrySet()

于 2013-09-27T19:07:35.043 回答
2

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

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

于 2013-09-27T19:06:50.927 回答