我无法在文档中确认这一点,但如果我有一个LinkedHashMap并且我在其上调用keySet()并迭代这个集合,它是否保证按插入顺序迭代?
答案 0 :(得分:3)
在Map
文档中指定:
Map
接口提供了三个集合视图,允许将地图的内容视为一组键,值集合或键值映射集。地图的顺序定义为地图集合视图上的迭代器返回其元素的顺序。某些地图实现(如TreeMap
类)对其顺序提供了特定的保证;其他人,比如HashMap类,不会。
对于LinkedHashMap
,这意味着所有3种方法 - values()
,keySet()
和entrySet()
,每个方法提供3种不同的集合视图,保证在插入顺序。
答案 1 :(得分:2)
是。 请在此处查看文档(您无法看到):http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html
使用Hash表和Map接口的链表实现 可预测的迭代顺序。此实现与HashMap不同 因为它维护着一个贯穿所有链接的双向链表 条目。该链表定义了迭代排序,即 通常是键插入地图的顺序 (插入顺序)。请注意,如果键是插入顺序不受影响 被重新插入地图。 (如果将密钥k重新插入到地图m中 当m.containsKey(k)返回true时,调用m.put(k,v) 在调用之前。)