,作为人的定义:如何覆盖这个hashCode方法?
public class Person {
private int id;
private int characteristics;
public boolean equals (Object obj) {
if (obj == this) {
return true;
}
if (obj instanceof Person) {
if (id == ((Person) obj).id) {
return true;
} else if (characteristics == ((Person) obj).characteristics) {
return true;
}
}
return false;
}
}
原因2个Person
对象a
和b
必须有相同的哈希码,如果a.equals(b)
回报true
,应该怎么实现hashCode
方法?
解决方案
我equals
方法实现,根据Java的等效协议是不正确的:传递不满意:a.id = 1
,a.characteristic = 2
,b.id = 1
,b.characteristic = 3
,c.id = 2
,c.characteristic = 3
; a.equals(b) == true
,b.equals(c) == true
,但是a.equals(c) == false
。
您可以异或ID和特征变量。 –
为了记录,您可以将第二组这些“if”转换为回报,即。 'return obj instanceof Person &&(id ==((Person)obj).id || characteristics ==((Person)obj).characteristics);'。你还应该在当前代码的末尾注意'return false',因为你的'equals'方法可能不会返回任何东西。 – SimplyPanda
@SimplyPanda第一个是完全错误的。 'return obj == this;'如果'obj'不是相同的实例,将会返回false,但是可能仍然是相等的值。 – cdhowie