为了账号安全,请及时绑定邮箱和手机立即绑定

HashMap 添加具有等于 true 和相同哈希码的对象

HashMap 添加具有等于 true 和相同哈希码的对象

撒科打诨 2021-07-16 18:07:28
我正在尝试HashMap为hashcode和equals方法创建自定义对象并编写代码。在 中添加对象时HashMap,equalsmethod 为 true 并且hashcode为两个对象返回相同的值,但HashMap将两个对象添加为不同的对象。这怎么可能?下面是我的代码:class B {    String name;    int id;    public B(String name, int id)    {        this.name=name;        this.id=id;    }    public boolean equals(B b){        if(this==b)            return true;        if(b==null)            return false;        if(this.name.equals(b.name) && this.id==b.id)            return true;        else            return false;    }    public int hashcode(){        return this.id;    }    public String toString(){        return "name: "+name+" id: "+id;    }}为了测试上面的代码,我在主类中添加了以下内容:HashMap<B,String> sample=new HashMap<>();B b1 = new B("Volga",1);B b2 = new B("Volga",1);System.out.println(b1.equals(b2));System.out.println(b1.hashcode()+"    "+b2.hashcode());sample.put(b1, "wrog");sample.put(b2,"wrog");System.out.println(sample);这将产生以下输出:true1    1{name: Volga id: 1=wrog, name: Volga id: 1=wrog}有人可以解释为什么会这样吗?
查看完整描述

3 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

您必须覆盖equals(Object)&hashCode()方法而不是equals(B b)& hashcode()。


尝试实现具有以下签名的方法,它应该可以工作:


@Override

public boolean equals(Object o){...}


@Override

public int hashCode() {...}

您还可以使用 IDE 的自动生成功能来生成这些方法。这样,就没有出错的机会。


查看完整回答
反对 回复 2021-07-29
  • 3 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信