文章目录
List集合使我们非常熟悉的,ArrayList等集合为我们提供了remove()方法,但在遍历时却不能随便使用,我们我们今天便从实现层面讨论下原因以及Iterator的相关知识。
ArrayList 遍历时删除方法
for循环向后遍历的陷阱
for(int i=0;i<list.size();i++){
if(list.get(i).equals("del"))
list.remove(i);
}
从前向后for循环遍历同时如果调用ArrayList提供的remove方法的话主要你删除第一个元素后会导致后面的元素向前移动,比如你删除了第0个元素后后面的n-1个元素都向前移动一个位置,但是i的值变为了1,而实际上一开始位于index=1位置的元素已经被移动到了index=0位置上,导致漏掉部分元素。
解决办法
从list最后1个元素开始从后向前遍历。
for(int i=list.size()-1;i>=0;i--){
if(list.get(i).equals("del"))
list.remove(i);
增强型for循环(foreach)遇到的问题
for(String s:list){
if(s.equals("two")){
list.remove(s);
}
}
如上代码运行会报错如下
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(Abstract