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

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

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


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

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