可能重复:
Is the order guaranteed for the return of keySet() of a LinkedHashMap object?
考虑我创建一个LinkedHashMap,如下所示:
Map<String, String> map = new LinkedHashMap<String, String>();
map.put("a", "aa");
map.put("b", "bb");
map.put("c", "cc");
当我致电keySet()
时,这会给我一个有序集吗?如果我打电话给values()
,这些订购了吗?
修改
Sry,意味着有序,没有排序。
答案 0 :(得分:8)
首先,LinkedHashMap
已订购,但未已排序。 TreeMap
已排序(因此已订购)。
尽管如此,您不能指望对keySet()
和values()
的输出进行排序。实际上,JavaDoc说没有关于的命令(事实证明,这些集合的命令 保证由JavaDoc:Is the order guaranteed for the return of keys and values from a LinkedHashMap object?),但是看看实现他们应该遵循基础Map
的顺序。
要解决您对问题的最近修改:它不是合同的一部分,实际上LinkedHashMap
甚至不实现keySet()
和values()
,而是使用基类(HashMap
})版本。即使基于实现,您可以看到订单已保留,但如果您希望应用程序可移植,则不应依赖它。
答案 1 :(得分:2)
检索密钥集或值时,您不会获得SortedSet
或已排序的集合。但是,返回的实现使用map的键/值迭代器,因此将按插入顺序返回值,例如,当在foreach循环中使用时。
因此,您可以获得LinkedHashMap
定义的订单,但您不一定要考虑对其进行排序(并且您也不能使用这些集合)。