ConcurrentModificationException - HashMap
ConcurrentModificationException - HashMap
考虑以下代码。
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));
有什么建议吗?为什么会这样?
"b" 成为最后一个元素。
检查在迭代器的next
方法中执行,不再调用。
考虑以下代码。
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));
有什么建议吗?为什么会这样?
"b" 成为最后一个元素。
检查在迭代器的next
方法中执行,不再调用。