java - 所有键中的 HashMap 值都会更新

标签 java hashmap

我有这样的 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/

相关文章:

java - 将大量键映射到少量值

java - HashMap 内部的 HashMap

java - 嵌套 HashMap : Alternative to putIfAbsent which does not requires null check and manual get?

java - 查找哪个 .class 文件的版本错误

java - Java中忽略文件中的无效数据

java - 如何正确应用 yt :accessControl in YouTube-API Java

java - 如何获取 JFrame 在屏幕中的位置以放入 JDialog?

java - 如何更改 SOAPBODY 中的子元素

java - 如果需要多次访问数组元素,如何减少对数组的搜索?

java - 打印 Java ConcurrentHashMap 中的所有键/值对