java.util.ConcurrentModificationException 已经百度过,折腾很久还是没想出来!!

[size=medium][color=darkred]代码很简单 ,其实就是想测试一下iterator 的用法,而且我在用iterator遍历的时候也没有修改原来集合中的内容。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TestList {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    List<String> l = new ArrayList<String>();
    Iterator it = l.iterator();
    String s = "abc";       

    for(int i=0;i<10;i++){
        s+=i;           
        l.add( s);          
    }
    System.out.println(l);      

    while(it.hasNext()){
        System.out.println("aa");           
        it.next();
    }   

}

}[/color][/size]

运行结果:
[color=red]Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at TestList.main(TestList.java:34)[/color]

[abc0, abc01, abc012, abc0123, abc01234, abc012345, abc0123456, abc01234567, abc012345678, abc0123456789]
aa

3个回答

补充之前的回答:
原因说明:
javadoc中写到:
如果进行迭代时用调用此方法之外的其他方式修改了该迭代器所指向的集合,则迭代器的行为是不明确的。

你的代码中 用for循环修改了迭代器所指向的集合
所以迭代器的行为是不明确的。


Iterator it = l.iterator();
这句 放到后面那个while的前面 for循环的后面

[quote]Iterator it = l.iterator(); [/quote]
移到while语句上方就没问题了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐