您的位置:首页 > 编程语言 > Java开发

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

2018-03-23 14:27 225 查看
先粘上测试代码:
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);
    }

}
结果:



成功跑出我们想要的结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐