我上了一堂课:
public class School{
private int noOfTeachers;
private int noOfStudents;
//setters and getters....
public boolean equals(Object that){
//instance of check..
return (this.noOfTeachers == ((School)that).noOfTeachers ||
this.noOfStudents== ((School)that).noOfStudents);
}
public int hashCode(){
//What goes in here??? o.O
}
}
我应该如何继续为此课程实施hashCode
?我无法想到一个将noOfTeachers
和noOfStudents
用于计算哈希的策略。相反,noOfTeachers
和noOfStudents
组合似乎违反了equals
和hashCode
之间的合同。
答案 0 :(得分:2)
您的课程不会找到任何正确的hashCode()
实施方案,这将满足您的需求!因为您的equals
方法会将OR
用于其类的属性。使用OR
方法中的equals
会为true
返回任意对象的多个状态。
所以使用hashCode()
的唯一返回值你肯定不能代表多个状态!而且你应该知道,hashCode()
必须为对象返回唯一值。
由于它返回多个值,导致将对象放入任何地图的模糊性(并且有害)。因为这违反了“地图键的唯一性”的假设。