java中foreach语句中使用remove时出现的问题

先粘上测试代码:

public  class test {
    public static void main(String[] args) {
       List<Integer> list=new ArrayList<>();
       list.add(1);
       list.add(2);
       list.add(3);
       for(Integer i:list)
       {
           if(i.equals(1))
           {
               list.remove(i);
           }
       }
    }

}

跑出的结果:


分析:

实际上foreach语句内部实现是迭代器,不允许在此中删除之后再次迭代

故若想遍历并remove元素,不能采用迭代器或者是foreach语句,我猜想是因为我使用Iterator进行迭代的同时,移除了其中的对象,破坏了Iterator内部用来迭代的索引。所以抛出异常。

如果使用普通的for循环,自己设定索引i 进行循环,就不会出现此问题

如下

public  class test {
    public static void main(String[] args) {
       List<Integer> list=new ArrayList<>();
       list.add(1);
       list.add(2);
       list.add(3);
       for(int i=0;i<list.size();i++)
       {
           if(list.get(i).equals(1))
           {
               list.remove(i);
           }
       }
       System.out.println(list);
    }

}

结果:

成功跑出我们想要的结果


版权声明:本文为kongshaohao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。