List remove时出错"ConcurrentModificationException"

来源:互联网 发布:人工智能处理器 编辑:程序博客网 时间:2024/06/17 15:19

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.csdn.net/smcwwh/article/details/7036663



0 0
原创粉丝点击