我写的用户类型如下
class Item {
int first;
int second;
public boolean equals(Item p) {
if(first == p.first && second == p.second )
return true;
else if(first == p.second && second == p.first)
return true;
else
return false;
}
public int hashcode() {
return Objects.hash(first, second);
}
public void set(Object first, Object second) {
this.first = Integer.parseInt(first.toString());
this.second = Integer.parseInt(second.toString());
}
}
然而,它根本不起作用。我是不是设计了错误的重复测试?
发布于 2019-05-10 03:23:59
一些微妙的问题:
public boolean equals(Object o)
(所以,是的,你需要与Object进行比较,而不是你的直接类)hashCode()
。对于corse,ewuals()认为相等的两个对象需要具有相同的hashCode值。这是您的实现无法实现的。这里真正的教训是:当你打算覆盖方法时,将@注解放在它上面,这样编译器就可以告诉你你搞砸了,是大是小。
在您的例子中,当您打算将您的类与任何java集合容器(如Map/HashMap )一起使用时,您需要将两个方法都弄错。
https://stackoverflow.com/questions/56066234
复制相似问题