需求
遍历一个List,如果元素符合某个条件,则从List中删除该元素
错误尝试
for(String str : list){
if(str.length()>10)
list.remove(str);
}
报错:ConcurrentModificationException
报错原因: 元素在使用的时候发生了并发的修改,删除元素后继续循环会导致异常信息,如果删除完毕马上break跳出则不会触发报错。
解决方案
Java中循环遍历List有三种方法:for、foreach、iterator。使用for循环遍历时,删除某个元素后,List的大小发生了变化,因而索引也发生变化,会导致遍历时漏掉某些元素。使用Iterator可以正常遍历及删除。
Iterator<String> str=list.iterator();
while(str.hasNext()){
String x=str.next();
if(x.length()>10)
it.remove();
}
注:使用iterator的remove方法,如果使用List的remove方法,仍然会报ConcurrentModificationException错