List中remove()方法的陷阱,被坑惨了,深入理解Nginx

本文探讨了在Java中使用List时遇到的remove()方法陷阱,解释了为何在for循环中直接删除元素会导致问题,并提供了正确的删除方式,如调整索引或倒序遍历。同时,文章提到了在foreach循环中删除元素引发的ConcurrentModificationException异常,推荐使用迭代器的remove()方法来安全地删除元素。
摘要由CSDN通过智能技术生成

if(list.get(i)==3) list.remove(i);

}

System.out.println(list);

输出结果:[1, 2, 3, 4]

为什么元素3只删除了一个?本以为这代码再简单不过,可还是掉入了陷阱里,上面的代码这样写的话,元素3是过滤不完的。只要list中有相邻2个相同的元素,就过滤不完。

List调用remove(index)方法后,会移除index位置上的元素,index之后的元素就全部依次左移,即索引依次-1要保证能操作所有的数据,需要把index-1,否则原来索引为index+1的元素就无法遍历到(因为原来索引为index+1的数据,在执行移除操作后,索引变成index了,如果没有index-1的操作,就不会遍历到该元素,而是遍历该元素的下一个元素)。

如果这样,删除元素后同步调整索引或者倒序遍历删除元素,是否可行呢?

2、for循环遍历List删除元素时,让索引同步调整–正确!

for(int i=0;i<list.size();i++){

if(list.get(i)==3) list.remove(i–);

}

System.out.println(list);

输出结果:[1, 2, 4]

3、倒序遍历List删除元素–正确!

for(int i=list.size()-1;i>=0;i–){

if(list.get(i)==3){ <

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值