1. 现象: 在遍历list的时候,出现如下错误:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at com.mylist.test.ListTest.removeFun1(ListTest.java:25)
at com.mylist.test.ListTest.main(ListTest.java:13)
2. 参考代码:
package com.mylist.test;
import java.util.ArrayList;
import java.util.List;
public class ListTest {
List<String> strList = new ArrayList<String>();
public static void main(String args[]){
ListTest t = new ListTest();
t.init();
t.removeFun1("a"); // 这里出错, 出错信息就是上面开头提到的。
//t.removeFun2("a"); //正确,
t.print();
}
public void init(){
strList.add("a");
strList.add("b");
strList.add("c");
}
//这种方法是java后来增加的一种语法,这里,remove的时候就会出错了。
public void removeFun1(String str) {
for (String tmpStr: strList) {
if (str.equals(tmpStr)) {
strList.remove(str);
}
}
}
//这是传统的for循环的写法,能够正确执行remove.
public void removeFun2(String str) {
for (int i = 0;i< strList.size();i++) {
if (str.equals(strList.get(i))) {
strList.remove(strList.get(i));
}
}
}
public void print() {
for (String tmpStr: strList) {
System.out.println(tmpStr);
}
}
}
3. 分析:请参考下面这个文章:
http://blog.youkuaiyun.com/smcwwh/article/details/7036663