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定义的顺序,但您不一定要考虑对其进行排序(并且您也不能使用这些集合)。