为什么在IF
块中添加元素并使用迭代器进行迭代?
HashMap<Integer, Integer> map = new HashMap<>();
map.put(1, 1);
map.put(2, 2);
map.put(3,3);
Iterator<Integer> it = map.keySet().iterator();
while(it.hasNext()) {
Integer key = it.next();
System.out.println("Map Value:" + map.get(key));
if (key.equals(2)) {
map.put(1, 4); // Works, Why?
}
//map.put(5, 5); // ConcurrentModificationException, as expected
}
请指出任何重复的地方,如果有的话,我会删除这个问题。
如果使用5
添加一个新键,则只更新if
中键1
的映射内部值,而不更新。因此,您正在修改大小,迭代器将失败。
一般来说:如果你想比较一个调用有效与另一个无效的原因,请确保你使用的是带有相同参数的同一个调用。因此map.put(1,4)
将在if.之外工作