2021-5-8
今天使用了for循环List,remove操作了list中的数据,运行测试的时候抛出了java.util.ConcurrentModificationException如下
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
在Itr.next()方法中调用Itr.checkForComdification()方法时抛出了ConcurrentModificationException
原因是我使用for(String str:list){
list.remove(str)
}
遍历方式是使用Itr遍历的,这个Itr是ArrayList实现的一个遍历接口,
但是我是用的是List.remove方法进行删除操作。
所以,在用了ArrayList.remove()方法之后,会使Itr里面的expectedModCount与ArrayList中的modCount不一致导致报错。
解决方案
使用索引遍历
if(!AegisCommonUtils.isNull(voList)) {
for(int i = 0;i<voList.size();i++){
String wvo = voList.get(i);
voList.remove(i);
i--;//这里要用索引遍历
}
}