我们要遍历删除ArrayList的元素,可能会这样写:
for(Integer i : list) {
lists.remove(i);
}
或者
for(int i = 0; i < lists.size(); i++) {
list.remove(i);
}
以上第一种方法会直接报java.util.ConcurrentModificationException
错误,因为在foreach循环写法中,它使用的是Iterator,而删除元素用的是ArrayList自身的remove()方法,而Iterator在调用hasNext()这个方法的时候,会判断是否数组被此Iterator外的其他对象给更改了,这里就是被ArrayList的对象更改了,所以会报错。
第二种方法不会报错,但删不干净,它会隔一个删一个,因为在删除的时候,后面的元素会前移,每次就会跳过一个元素。
正确的写法有三种:
Iterator iter = list.iterator();
while(iter.hasNext()) {
iter.next();
iter.remove();
}
for(int i = 0; i < lists.size();) {
list.remove(i);
}
list.clear();