面试题:java中ArrayList循环遍历并删除元素的陷阱
2017-09-05 00:00
435 查看
直接对ArrayList采用foreach方式遍历并查找删除元素会出现 java.util.ConcurrentModificationException异常;正序删除的方式会漏掉一个元素。
原因:ArrayList的remove底层源码有一个fastremove方法,会有一个modcount++ 的操作,然后再ArrayList内部迭代器中有一个checkForComodification操作,会去检查modCount是否改变,如果改变了就抛出并发修改异常。不管是for each还是使用变量的for循环,都是利用了ArrayList自身的Iterator迭代器,都会出现这样的错误。
注意查看源码!!!
应对措施:
1、使用Iterator自己的remove方法;
2、采用倒序删除的写法来改正这个错误。
原因:ArrayList的remove底层源码有一个fastremove方法,会有一个modcount++ 的操作,然后再ArrayList内部迭代器中有一个checkForComodification操作,会去检查modCount是否改变,如果改变了就抛出并发修改异常。不管是for each还是使用变量的for循环,都是利用了ArrayList自身的Iterator迭代器,都会出现这样的错误。
注意查看源码!!!
应对措施:
1、使用Iterator自己的remove方法;
2、采用倒序删除的写法来改正这个错误。
相关文章推荐
- 面试题:Java中ArrayList循环遍历并删除元素的陷阱
- Java中ArrayList循环遍历并删除元素的陷阱
- java ArrayList循环遍历并删除元素的常见陷阱
- ArrayList循环遍历并删除元素的常见陷阱
- ArrayList循环遍历并删除元素的常见陷阱
- ArrayList循环遍历并删除元素的常见陷阱
- 【转】ArrayList循环遍历并删除元素的常见陷阱
- ArrayList循环遍历并删除元素的常见陷阱
- ArrayList循环遍历删除元素常见陷阱
- java.util.ArrayList在foreach循环遍历时删除元素的问题
- ArrayList循环遍历并删除元素的陷阱
- ArrayList循环遍历并删除元素的常见陷阱
- ArrayList循环遍历并删除元素的常见陷阱
- ArrayList循环遍历并删除元素的常见陷阱
- 下面将针对java.util.ArrayList在foreach循环遍历时删除元素的问题
- [破除迷信]java.util.ArrayList在foreach循环遍历时可以删除元素
- ArrayList循环遍历并删除元素的常见陷阱
- [破除迷信]java.util.ArrayList在foreach循环遍历时可以删除元素
- ArrayList循环遍历并删除元素的常见陷阱
- java中循环遍历删除List和Set集合中元素的方法