如何使用列表作为值循环访问LinkedHashMap

2022-08-31 15:46:12

我遵循LinkedHashMap声明。

LinkedHashMap<String, ArrayList<String>> test1

我的观点是我如何迭代这个哈希图。我想在下面这样做,对于每个键获取相应的数组列表,并针对该键逐个打印数组列表的值。

我试过这个,但只得到返回字符串,

String key = iterator.next().toString();  
ArrayList<String> value = (ArrayList<String> )test1.get(key)

答案 1
for (Map.Entry<String, ArrayList<String>> entry : test1.entrySet()) {
    String key = entry.getKey();
    ArrayList<String> value = entry.getValue();
    // now work with key and value...
}

顺便说一句,您应该将变量声明为接口类型,例如 .Map<String, List<String>>


答案 2

我假设你的get语句中有一个拼写错误,它应该是test1.get(key)。如果是这样,我不确定为什么它没有返回ArrayList,除非你一开始就没有在映射中输入正确的类型。

这应该有效:

// populate the map
Map<String, List<String>> test1 = new LinkedHashMap<String, List<String>>();
test1.put("key1", new ArrayList<String>());
test1.put("key2", new ArrayList<String>());

// loop over the set using an entry set
for( Map.Entry<String,List<String>> entry : test1.entrySet()){
  String key = entry.getKey();
  List<String>value = entry.getValue();
  // ...
}

或者您可以使用

// second alternative - loop over the keys and get the value per key
for( String key : test1.keySet() ){
  List<String>value = test1.get(key);
  // ...
}

在声明 vars(以及在泛型参数中)时,应使用接口名称,除非您有非常具体的原因来使用该实现进行定义。