java---集合ArrayList遍历并添加元素报错

集合ArrayList遍历并添加元素报错

案例:创建一个集合,存入两个元素,“曹操” “貂蝉” ,遍历集合,如果发现遍历的元素是貂蝉,就向集合中添加一个“吕布”

代码实现:

ArrayList<Object> list = new ArrayList<>();
        list.add("曹操");
        list.add("貂蝉");
        for (int i = 0; i < list.size(); i++) {
          
   
            if (list.get(i).equals("貂蝉")){
          
   
                list.add("吕布");
            }
            System.out.println(list.get(i));
        }

        //增强for循环遍历
        for (Object o:list){
          
   
            System.out.println(o);
            if (o.equals("貂蝉")){
          
   
                list.add(1,"吕布");
            }
        }

        Iterator it= list.iterator();
        while (it.hasNext()){
          
   
            if (it.equals("貂蝉")){
          
   
                list.add("吕布");
            }
            System.out.println(it.next());
        }

可是在运行的时候,我们却发现报java.util.ConcurrentModificationException的错误 我们按住crtl点击进入Iteator的内部,选中它后使用菜单中的Navigate中的Type Hierarchy 因为集合变化次数自增了,而迭代器的变化次数并没有跟着变化,才会报错。 而修改元素,并没有使集合的变化次数进行自增,与迭代器的变化次数的一样的,所以不会报错。同理,删除元素时,集合的变化次数也跟着改变了,所以也会报错!

经验分享 程序员 微信小程序 职场和发展