删除花花二代时被抛出异常了

来源:3-12 删除宠物猫信息

ShawnGao

2017-01-17 12:06:46

for (Cat cat:set){
    if ("花花二代".equals(cat.getName())){
        set.remove(cat);
    }
}

运行到这时系统抛出异常:java.util.concurrentmodificationexception

我查了一下是迭代时同时对其进行修改就会抛出。我在set.remove(cat);后添加break就解决了。

但是问题来了:

1,为什么视频里没有出现异常?

2,虽然break能解决,但是如果我打算删除所有年龄12个月的猫,而且12个月大的猫不止一只,那么我这里用break就只能删除一只,我这代码应该如何处理?


写回答

1回答

好帮手慕珊

2017-01-17

1、因为使用增强型for循环,或者迭代器进行循环删除时,数据的长度改变了,引起了混乱,所以会抛出异常。

2、视频里是个巧合,刚好删除了集合中的最后一个元素。稍后视频中会进行说明。

如果想循环删除,可以使用下面的代码:

List list=new ArrayList();

for(Cat cat:set){

  if("花花二代".equals(cat.getName())){

      list.add(cat);

   }

}

set.removeAll(list);

也就是把需要删除的集合对象存放到一个List中,最后执行这条语句set.removeAll(list);将set中的所有包含的list中的元素进行删除。

非常感谢你的提问,祝学习愉快!

0
hhawnGao
h 懂了,谢谢老师回答
h017-01-18
共1条回复

0 学习 · 7235 问题

查看课程