LinkedHashMap的keySet()和values()方法的行为
可能重复:
是否保证返回LinkedHashMap对象的keySet()的顺序?
考虑一下我创建一个LinkedHashMap,如下所示:
Map map = new LinkedHashMap(); map.put("a", "aa"); map.put("b", "bb"); map.put("c", "cc");
当我调用keySet()
,这会给我一个有序集吗? 如果我调用values()
,这些也是有序的吗?
编辑
Sry,意味着有序,没有排序。
首先, LinkedHashMap
是有序的,但没有排序 。 TreeMap
已排序 (因此也被排序 )。
也就是说,你不能指望对keySet()
和values()
的输出进行排序。 实际上JavaDoc说 没有关于订单 (事实certificate,订单是由JavaDoc保证的:这些集合中的键和值的返回是否保证了这些集合中的键和值的返回? ),但是在查看实现时,它们应该遵循底层Map
的顺序。
要解决您对问题的最近编辑:它不是合同的一部分,实际上LinkedHashMap
甚至不实现keySet()
和values()
而是使用基类( HashMap
)版本。 即使基于实现,您可以看到订单已保留,但如果您希望应用程序可移植,则不应依赖它。
在检索密钥集或值时,您不会获得SortedSet
或已排序的集合。 但是,返回的实现使用map的键/值迭代器,因此将按插入顺序返回值,例如在foreach循环中使用时。
因此,您可以获得LinkedHashMap
定义的顺序,但您不一定要考虑对其进行排序(并且您也不能使用这些集合)。