LinkedHashMap的keySet()和values()方法的行为

时间:2012-03-06 12:23:49

标签: java collections

  

可能重复:
  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,意味着有序,没有排序。

2 个答案:

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