在遍历列表时添加重复元素时,迭代器不会给出并发修改异常。这是什么原因?

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()中是否有任何修改。

07-28 01:52
查看更多