关于equals方法

关于equals方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
项目作业中,school类要求实现添加、删除班级的方法。于是我先写了个判断一个班级是否已经存在的方法,如下:
public boolean panduan(Banji banji) {
        Collection<Banji> col = schoolMap.values();
        for (Banji bj : col) {
 
            if (bj.equals(banji))
                return true;
            break;
        }
 
        return false;
    }
     
    (注:Map<String,Banji> schoolMap=new HashMap<String,Banji>();)
     
    然后写了添加、删除班级的方法,通过调用上面的方法判断待处理的参数是否已存在,如下:
    // 添加班级
    public void addBanji(Banji banji) {
        if (panduan(banji))
            System.out.println("添加失败!班级已存在!");
        else {
            schoolMap.put(banji.getClassName(), banji);
            System.out.println("添加成功!");
        }
 
    }
 
    // 删除班级
    public void deleteBanji(Banji banji) {
        if (panduan(banji)) {
            schoolMap.remove(banji.getClassName());
            System.out.println("删除成功!");
        else
            System.out.println("删除失败!班级不存在!");
    }
    接着进行测试。创建了三个不同的班级进行添加、删除操作:
            Banji bj1=new Banji("s001","一班");
        Banji bj2=new Banji("s002","二班");
        Banji bj3=new Banji("s003","三班");
    然而测试结果并不理想。执行添加操作时没有问题,但执行删除时,bj1成功删除,但bj2和bj3删除失败,判断方法中的equals方法返回的是false。三个班级都是添加成功了的,不明白为什么会这样。
         
    


正在回答

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

1回答

你需要重写  hashcode以及equals两个方法

  • 之雪 提问者 #1
    嗯······我多试了几次,发现和hashcode和equals无关。是我把if后面的break写错位置了,导致循环没有重复运行。所以删除bj1可以,删除bj2和bj3就会失败。但还是感谢你的回答。
    2020-05-29 16:10:17
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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