我有这样的地图
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
地图---&GT; {A = [],B = [],C = []}
我正在尝试将“hai”添加到键A. 但它正在被添加到所有关键。以下是我的代码 我错了某地
for (Entry<String, List<String>> entry : map.entrySet()) {
String a = entry.getKey();
if(a.equals(attr)){
List<String> temp = entry.getValue();
temp.add("hai");
map.put(a, temp);
System.out.println("----------"+map);
}
}
输出:------------ {A = [hai],B = [hai],C = [hai]}
请建议
提前致谢
答案 0 :(得分:3)
不确定为什么会发生这种情况,也许正如Eran所建议的那样,你没有表现出来。但是,有一种更简单的方法可以做到这一点,而不是遍历所有键......
Map<String, List<String>> map = new HashMap<>();
...
List<String> values = map.get(attr);
if(values == null) {
values = new ArrayList<String>();
map.put(attr, values);
}
values.add("hai");
我只是在这里猜测,但我怀疑你是在做这个来创建阵列......
Map<String, List<String>> map = new HashMap<>();
List<String> values = new ArrayList<>();
map.put("A", values);
map.put("B", values);
map.put("C", values);
这会导致A,B和C共享同一个List实例。因此,当您在一个键(例如A)下操作列表时,您实际上对所有键下存储的列表进行了相同的更改,因为它是所有三个键的SAME列表。
上面描述了对此的修复,但基本上你想为地图中的每个键创建一个新的List实例。
答案 1 :(得分:2)
您可能在Map的所有值中放置了相同的List。但是,这种情况发生在您未显示的代码中。当您第一次在地图中放置一个键时,请确保为其值创建一个新列表。