在循环中删除list中的元素

简介:

 这个事情本身比较简单,但是在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,如需转载请自行联系原作者
相关文章
|
存储 人工智能 Java
如何用Java找出两个List中的重复元素,读这一篇就够了
在Java编程中,我们经常需要找出两个列表(List)中的重复元素。在本文中,我们将探讨三种方法来实现这一目标。
|
索引
【Qt 学习笔记】Qt常用控件 | 多元素控件 | List Widget的说明及介绍
【Qt 学习笔记】Qt常用控件 | 多元素控件 | List Widget的说明及介绍
1204 3
|
存储 NoSQL 安全
Redis第六弹-List列表-(相当于数组/顺序表)Lpush key element-一次可以插入多个元素(假如key已经存在,并且key对应的value并非是list,则会报错)
Redis第六弹-List列表-(相当于数组/顺序表)Lpush key element-一次可以插入多个元素(假如key已经存在,并且key对应的value并非是list,则会报错)
|
NoSQL Java Redis
Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
|
Java API
【亮剑】三种有效的方法来删除List中的重复元素Java的List
【4月更文挑战第30天】本文介绍了三种Java中删除List重复元素的方法:1) 使用HashSet,借助其不允许重复值的特性;2) 利用Java 8 Stream API的distinct()方法;3) 对自定义对象重写equals()和hashCode()。每种方法都附带了代码示例,帮助理解和应用。
1522 1
|
存储 NoSQL Redis
Redis第四弹,Redis实现list时候做出的优化ziplist(压缩链表,元素少的情况),可更好的节省空间list——(内部编码:quicklist)Object encoding
Redis第四弹,Redis实现list时候做出的优化ziplist(压缩链表,元素少的情况),可更好的节省空间list——(内部编码:quicklist)Object encoding
JAVA——List中剔除空元素(null)的三种方法汇总
JAVA——List中剔除空元素(null)的三种方法汇总
|
SQL XML Java
<foreach>元素中collection=list改成collection=array
<foreach>元素中collection=list改成collection=array
|
算法 安全 Java
java将list中的某个元素移动位置
【2月更文挑战第12天】
482 0
|
Java
Java对list集合元素进行排序的几种方式
Java对list集合元素进行排序的几种方式
651 0