删除花花二代时被抛出异常了
来源: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回答
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中的元素进行删除。
非常感谢你的提问,祝学习愉快!
相似问题