我有这样的 map
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
map ---> {A=[], B=[], C=[]}
我正在尝试将“hai”添加到键 A 中。 但它正在被添加到所有 key 中。下面是我的代码 我有地方说错了
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]}
请推荐
提前致谢
最佳答案
不确定为什么会发生这种情况,也许正如 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 共享同一个列表实例。因此,当您在一个键(例如 A)下操作列表时,您实际上是在对所有键下存储的列表进行相同的更改,因为这三个键的列表都是相同的。
上面描述了该问题的修复方法,但本质上您希望为映射中的每个键创建一个新的 List 实例。
关于java - 所有键中的 HashMap 值都会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27661793/