标签:
1 问题 :在list<String> 中清空所有的记录,只使用使用单循环,不使用removeAll()
2 可以写出五种方式,代码如下:
3运行结果如下:
2,4,5运行正常,1,3抛出
java.util.ConcurrentModificationException
4问题原因:
1,3都是因为list的长度改变,Iterator执行next()方法时,调用checkForComodification()时出错,1,3是同一个问题,这两个方法remove操作都是执行的是ArrayList中的remove方法,根本原因在于expectedModCount与modCount他们的不相等,由于执行了ArrayList中的remove(),modCount在每一次循环值会发生改变,而expectedModCount并没有发生,在执行checkForComodification()方法就会抛出异常。
2之所以正确运行是因为调用了Iterator的remove方法,4,5不会执行checkForComodification()操作,所以不会出现这种异常。
5结论 :在执行remove()不要将ArrayList 与Interator混合使用,单独使用Interator以及ArrayList的删除都是OK的
6参考的源码
Iterator的next()方法:
Iterator的remove()方法:
ArrayList的remove()方法:
解决ArrayList的ConcurrentModificationException
标签:
原文地址:http://www.cnblogs.com/helinzi/p/4881032.html