今天遇到了一个问题,需要循环一个list,并且在循环中对每个元素依据某条件进行判断,不符合规则则移除元素。
最开始写考虑到删除List中元素会使其他元素位移,所以使用增强for来进行实现,代码如下:
for(Object object : list){
if(object.id<5){
list.remove(object);
}
}
运行以上语句会报异常ConcurrentModificationException。这个异常翻译过来是并发修改异常。
在网上查阅资料才知道,这种情景下要删除元素应该使用Iterator,代码如下:
Iterator<Object> iterator = list.iterator();
while(iterator.hasNext()){
Object object = iterator.next();
if(object.id<5){
iterator.remove();
}
}
这样list中满足条件的元素就被移除了。或者另一种解决方案是使用原始的for循环来删除list中的元素,这样并不会有异常产生。