xiaoasha
xiaoasha
2010-11-02 10:15
浏览 278
已采纳

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条回答 默认 最新

  • limengchengg
    limengchengg 2010-11-02 10:32
    已采纳

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

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

    点赞 评论
  • limengchengg
    limengchengg 2010-11-02 10:22


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

    点赞 评论
  • CaiHuajiang
    CaiHuajiang 2010-11-02 10:25

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

    点赞 评论

相关推荐