正在回答
同学你好,同学描述的是否是ConcurrentModificationException异常。如下图所示:
因为花花二代是集合遍历时最后一个遍历到的数据,删除花花二代以后,集合也就遍历结束了,这样是没有问题的。但是如果删除花花,因为不是集合最后遍历的数据,之后循环会继续执行,这时候就会发生错误。因为删除数据后,集合的存储结构就发生变化了,再遍历肯定要出错。
如果不是建议同学重新描述一下问题。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
package com.imooc.set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class CatTest {
public static void main(String[] args) {
// 定义宠物猫对象
Cat huahua = new Cat("花花", 12, "英国短毛猫");
Cat fanfan = new Cat("凡凡", 3, "中华田园猫");
// 将宠物猫对象放入HashSet中
Set<Cat> set = new HashSet<Cat>();
set.add(huahua);
set.add(fanfan);
// 显示宠物猫信息
Iterator<Cat> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// 再添加一个与花花属性一样的猫
Cat huahua01 = new Cat("花花", 12, "英国短毛猫");
set.add(huahua01);
System.out.println("**********************************");
System.out.println("添加重复数据后的宠物猫信息:");
it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println("**********************************");
// 重新插入一个新宠物猫
Cat huahua02 = new Cat("花花二代", 2, "英国短毛猫");
set.add(huahua02);
System.out.println("添加花花二代后的宠物猫信息:");
it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println("**********************************");
// 在集合中查找花花的信息并输出
if (set.contains(huahua)) {
System.out.println("花花找到了!");
System.out.println(huahua);
} else {
System.out.println("花花没找到!");
}
// 在集合中使用名字查找花花的信息
System.out.println("**********************************");
System.out.println("通过名字查找花花信息");
boolean flag = false;
Cat c = null;
it = set.iterator();
while (it.hasNext()) {
c = it.next();
if (c.getName().equals("花花")) {
flag = true;// 找到了
break;
}
}
if (flag) {
System.out.println("花花找到了");
System.out.println(c);
} else {
System.out.println("花花没找到");
}
// 删除花花二代的信息并重新输出
for (Cat cat : set) {
if ("花花".equals(cat.getName())) {
set.remove(cat);
break;
}
}
System.out.println("**********************************");
System.out.println("删除花花二代后的数据");
for (Cat cat : set) {
System.out.println(cat);
}
// 删除集合中的所有宠物猫信息
System.out.println("**********************************");
boolean flag1 = set.removeAll(set);
if (set.isEmpty()) {
System.out.println("猫都不见了。。。");
} else {
System.out.println("猫还在。。。");
}
}
}
为什么我的运行没有报错?
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星