大家好,又见面了,我是你们的朋友全栈君。
如何遍历ArrayList集合,并安全删除其中的元素?
1、遍历ArrayList集合有三种方式
(1)for循环
(2)增强for循环,也就是foreach
(3)迭代器iterator
2、普通for循环遍历删除元素,list集合的大小会变小,而索引也会发生改变,所以利用f
for循环遍历删除元素会漏调某些元素。
例如我for循环遍历删除第一个元素,接着按照索引去寻找第二个元素,由于删除的关系
后面所有的元素都会往前面移动一位,就会导致按照索引得到的是第三个元素。
解决方法:将list集合反过来遍历,循环删除其中的元素
当我们使用增强for循环删除第一个元素后,再去遍历list集合,此时就会报并发修改错
(concurrentModificationException异常)。
通过查看list的remove方法的源码,我们可以看到,remove方法中有一个modCount++操作,
然后再list集合的迭代器中有一个check操作,也就是检查modCount是否改变,如果改变
就会抛出并发修改错误。
解决方法:增强for循环遍历删除第一个元素后就break跳出。
使用迭代器循环遍历删除某些元素,不会出现问题,但是我们要注意的是,使用的是
iteraror.remove()方法,而不是list.remove()方法;如果使用的是list的remove方法,
同样会报conCurrentModificationbException异常
3、总结
如果是遍历删除list集合中某个特定的元素,使用这三个遍历方式都可以。
如果要循环遍历删除多个元素,最好使用迭代器。其次使用普通for循环反过来遍历list集合
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163132.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...