我正在尝试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 的自动生成功能来生成这些方法。这样,就没有出错的机会。
添加回答
举报
0/150
提交
取消