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);
    }

}

结果:

成功跑出我们想要的结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值