Java - 将LinkedHashMap键/值放入各自列表的简单方法?

16 java collections dictionary list linkedhashmap

我有一个LinkedHashMap < String, String > map.

List < String > keyList;
List < String > valueList;

map.keySet();
map.values();
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以从map.values()填充keyList,从map.values()填充valueList,还是必须迭代?

Boz*_*zho 42

大多数集合接受Collection作为构造函数参数:

List<String> keyList = new ArrayList<String>(map.keySet());
List<String> valueList = new ArrayList<String>(map.values());
Run Code Online (Sandbox Code Playgroud)

  • 我很好奇map.keySet()并检查了代码.对于LinkedHashMap,它返回LinkedHashMap $ LinkedKeySet,它具有可预测的顺序(源LinkedHashMap的顺序),就像map.values()一样.所以上面的代码将按预期工作,最后你得到两个列表,其中keyList [n] ==> valueList [n]. (3认同)
  • LinkedHashMap 和 List 都有一个顺序,所以我希望得到的结果是 Lists 和 map 的顺序相同。但是,您使用 Set 作为中间类型(map.keySet() 的返回值),它没有顺序。因此,不能保证 keyList 与 map 具有相同的顺序(但请注意,map.values() 返回一个集合而不是一个集合,因此它没有问题。[删除了更多关于 `values() ` 因为它是基于我对文档的误解] (2认同)

Vic*_*mar 7

当然!

keyList.addAll(map.keySet());
Run Code Online (Sandbox Code Playgroud)

或者你也可以在创作时传递它

List<String> keyList = new ArrayList<String>(map.KeySet());
Run Code Online (Sandbox Code Playgroud)

http://download.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html