报错了...跟老师的代码一样

报错了...跟老师的代码一样

删除后的数据

Exception in thread "main" java.util.ConcurrentModificationException

at java.util.HashMap$HashIterator.nextNode(Unknown Source)

at java.util.HashMap$KeyIterator.next(Unknown Source)

at com.imooc.set.CatTest.main(CatTest.java:75)


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
吃吃吃鱼的猫 2019-05-04 18:35:53

同学你好,Set集合是无序的。

虽然在最后添加了“花花二代”,但是其在集合中的顺序是不确定的,所以会发生视频中删除成功,但是同学删除失败的现象。

在之后的课程中,老师对这一现象也有详细的讲解哦~

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 敲代码的刘吉安 #1
    那如何解决?删除失败?怎么修改代码,使能删除成功?
    2019-05-07 10:59:22
  • 提问者 敲代码的刘吉安 #2
    怎么解决这个异常,
    2019-05-07 11:04:17
  • 解决的办法就是,1、可以在增强型for循环外边删除,如果找到了可以先标记一下,在for循环外边判断是否找到了,找到了在for循环外边删除。2 或者删除之后,添加break,跳出循环。3、可以使用正常的for循环的形式,而不是采用增强型for循环的形式也可以。4、在视频的第12分15秒左右,老师也给出了解决方案呦,同学可以再看一下视频。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-05-07 15:30:17
提问者 敲代码的刘吉安 2019-05-04 17:49:28

【报错-源码】

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 huahuaCat = new Cat("花花",12,"英短");

Cat fanfanCat = new Cat("凡凡", 13, "中华田园猫");

//讲宠物猫对象 放入 HashSet 中

Set<Cat> set = new HashSet(); //泛型 对操作内容的类型进行限制

set.add(huahuaCat);

set.add(fanfanCat);

//显示宠物猫信息

Iterator<Cat> iterator =set.iterator();

while (iterator.hasNext()) {

System.out.println(iterator.next());

} //输出 包名@ + 地址 → 改写 toString方法,可梗概对象内输出结果


//添加重复对象

Cat huahuaCat01 = new Cat("花花",12,"英短");

set.add(huahuaCat01);

System.out.println("======================"+"\n添加重复信息后: ");

iterator = set.iterator();

while (iterator.hasNext()) {

System.out.println(iterator.next());

}

//继续添加新的宠物猫对象

System.out.println("======================");

Cat huahuaCat02 = new Cat("花花二代",12,"英短");

set.add(huahuaCat02);

System.out.println("添加花花二代后的宠物信息:");

iterator = set.iterator();

while (iterator.hasNext()) {

System.out.println(iterator.next());

}

//查找“花花”信息并输出

System.out.println("======================"+"通过对象查找:");

//①使用对象名查找

if(set.contains(huahuaCat))

{System.out.println("花花找到了!");

System.out.println(huahuaCat);}

else {System.out.println("花花未找到");}

//②使用名字查找

System.out.println("======================"+"通过名字查找:");

boolean flag = false;

Cat c=null;

iterator = set.iterator();

while (iterator.hasNext()) {

c =(Cat)iterator.next();

if(c.getName().equals("花花")) {

flag = true; //找到了

break;}

}

if(flag) {

System.out.println("花花找到了");

System.out.println(c);

}

else {

System.out.println("花花未找到");

}

//删除花花二代的信息并重新输出

// System.out.println("=============="+"\n"+"删除后的数据");

// for(Cat cat:set) {

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

// set.remove(cat);

// }

//

// for(Cat cat:set) {System.out.println(cat);}

//

//

}


}


吃吃吃鱼的猫 2019-05-04 11:56:56

同学你好,在集合内部有一把锁,当遍历集合时,如果执行删除元素的操作会出现java.util.ConcurrentModificationException异常。

视频中删除的“花花二代”是集合中的最后一个元素,此时集合已经遍历结束,不会再出现这种异常,同学可以检查下,在代码中是否在遍历集合元素时,存在删除元素的操作。

如果不是的话,建议同学贴出复制后的完整代码,方便老师帮助同学更快更好的解决问题~

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 敲代码的刘吉安 #1
    是需要删除元素,按照老师课上的代码敲了一遍,一模一样,那老师课上演示怎么不报错...
    2019-05-04 17:47:59
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师