为什么在迭代HashMap的同时在IF块中添加元素是有效的



为什么在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.之外工作

最新更新