这几天遇到一个问题,需要边迭代容器边删除容器中的元素,然后就出错了,看了几篇博客之后了解了原因这里就不重复记录了,只复现一下BUG和解决方法
BUG提示:java.util.ConcurrentModificationException
推荐博客:https://blog.csdn.net/qq_20492999/article/details/81216453
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
public class Main{
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
Random ran = new Random();
//先加入20个元素
for(int i = 0;i < 20;i++) {
list.add(ran.nextInt());
}
System.out.println(list.toString());
//删除集合所有元素
//推荐方法:调用迭代器的remove方法
Iterator<Integer> it = list.iterator();
while(it.hasNext()) {
it.next();//调用remove之前先将迭代器指向下个元素
it.remove();
}
System.out.println(list.toString());
}
}
//错误方法:增强的for循环
for(int x : list) {
int index = list.indexOf(x);
list.remove(index);
}
//其他方法:
while(!list.isEmpty()) {
list.remove(0);
}