查了很多资料,都说是对List或者set同时操作的问题,可是我这里只是增加啊,为什么也抛java.util.ConcurrentModificationException

List<Cow> cows=new ArrayList<Cow>();
Cow c =new Cow(age);
cows.add(c);
for(Iterator<Cow> it=cows.iterator();it.hasNext();){
Cow c1=(Cow)it.next();
}把它改成下面这个的话,就不抛异常了
List<Cow> cows=new ArrayList<Cow>();
Cow c =new Cow(age);
cows.add(c);
for(int j=0;j<cows.size();j++){
Cow c1=cows.get(j);

}哪位大佬帮忙解释下,为什么会这样

解决方案 »

  1.   

    遍历过程中,不能对集合进行删除或添加,否则迭代会立即失败除非使用迭代器本身提供的删除或添加方法比如 Iterator的remove
    比如 ListIterator的add和remove
      

  2.   

    用 ListIterator,支持添加和删除
      

  3.   

    lz可以去看api ,我记得上面说的是 在迭代过程中更新集合 不保证它的正确性。考虑的是并发情况, 如果有相关的需求,建议采取其他方式解决。
      

  4.   

    List<Cow> cows=new ArrayList<Cow>();
    Cow c =new Cow(age);
    cows.add(c);
    for(Iterator<Cow> it=cows.iterator();it.hasNext();){
        Cow c1=(Cow)it.next();            
    } Cow c1=(Cow)it.next();   这句有问题了。。Iterator<Cow>表示这个里面的元素都是Cow类型的,就只要直接 Cow cl = it.next()就可以了,不需要转型。。         
      

  5.   

    我理解有错,代码没帖全,哈哈,实际上是下面这个的!抱歉啊,理解错了!现在好了,谢谢你们哦
    for(Iterator<Cow> it=cows.iterator();it.hasNext();){
    Cow c1=(Cow)it.next();*/

    if(c1.getAge()>=bornyear){
    cows.add(c1.born());
    }

    }