在遍历列表时添加重复元素时,迭代器不会给出并发修改异常。这是什么原因?
Map<String,String> myMap = new HashMap<String,String>();
myMap.put("1", "1");
myMap.put("2", "2");
myMap.put("3", "3");
Iterator<String> it1 = myMap.keySet().iterator();
while(it1.hasNext()){
String key = (String) it1.next();
System.out.println("Map Value:"+myMap.get(key));
if(key.equals("2")){
myMap.put("1","4");
}
}
最佳答案
由于您正在更新myMap中的现有键值,因此其大小没有更改,并且没有收到ConcurrentModificationException。
如果您想知道Iterator如何检查修改,则其实现在定义了int变量modCount的AbstractList类中提供。 modCount提供更改列表大小的次数。在每个next()调用中都使用modCount值来检查功能checkForComodification()中是否有任何修改。