有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ConcurrentModificationException哈希映射

考虑下面的代码。

Map<Integer,String> map = new HashMap<Integer, String> (5);
map.put(1, "a");
map.put(2, null);
map.put(3, "b");
map.put(4, "e");
for (String str : map.values()) {
    if ("b".equals(str)) {
        map.put(5, "f");
    }
}
System.out.println(map.get(5));

它将发生ConcurrentModificationException。在这种情况下,我理解我们不能修改我们正在迭代的集合。
但是,请考虑下面的代码。我只删除一行map.put(4,"e");
它会工作的

Map<Integer,String> map = new HashMap<Integer, String> (5);
map.put(1, "a");
map.put(2, null);
map.put(3, "b");
for (String str : map.values()) {
    if ("b".equals(str)) {
        map.put(5, "f");
    }
}
System.out.println(map.get(5));


有什么建议吗?为什么会这样


共 (1) 个答案

  1. # 1 楼答案

    “b”成为最后一个元素

    检查在迭代器的next方法中执行,不再调用它