在循环体内remove 集合list的元素
存放数据
List<String> list = new ArrayList<String>();
//存放数据
for (int i = 0; i < 10; i++) {
list.add("数据"+i);
}
//debug测试循环并添加数据
int index = 0;
//报错 java.util.ConcurrentModificationException
for (String string : list) {
list.add("添加数据"+(index++));
}
增强for循环
int index = 0;
//报错 java.util.ConcurrentModificationException
for (String string : list) {
list.add("添加数据"+(index++)); //这里使用remove也是一样
}
报错原因可以理解为多线程对同一资源进行操作而发生冲突,至于更加详细原因,对底层代码还不是很了解,就暂且不提。。
Iterator 方式
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
iterator.remove();
}
使用这种方式是可以进行删除的
普通循环
for (int i = 0; i < list.size(); i++) {
list.remove(i);
System.out.println(list.size());
}
debug模式下查看详情
开始循环
删除一次后
再一次删除后
可以看到 数据1 被遗漏了
以下为list长度的变化
说明: list在删除元素后同时将元素往前移,关于这点这需要了解list的底层实现机制了。
具体说明可以查看
java开发手册华山版