在循环中删除list中的元素

本文介绍了一种在Java中安全地从List中删除元素的方法,避免了使用foreach循环时出现的ConcurrentModificationException异常。通过采用反向for循环遍历并移除元素的方式,有效地解决了这一常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 这个事情本身比较简单,但是在java中想直接实现却有些棘手。如果直接用for each的方式,删除其中的元素的话会报出ConcurrentModificationException异常。原因很简单,就是你改变了list,那么之前生成的迭代器就不能再继续工作了。

 
    上面这个问题碰到很多次了,之前总是用比较猥琐的办法绕过去。比如只删除一个元素的话,找到记录下来再删除;或者干脆新建一个数组,把找到的东西移动过去。今天突然上网查了一下,发现了个很好的帖子,从正面解决了这个问题。
 
    解决思路:利用for循环,将数组反向遍历。for循环可以解决在循环过程中改变列表不能继续的问题,因为用的是get方法取元素。反向便利解决了如果删除一个元素,后面的元素会向前移动的问题。这样一来就和普通的循环一样操作就可以了。
 
    示例:
for (int i = list.size(); i >= 0; i--) {  
    if ((i + 1) % 2 == 0) {  
        list.remove(i);  
    }  
}  
 
    感想:不是所有问题都是技术问题,很多时候一个好的思路就能巧妙的解决问题。


本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/691932,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值