我有一个类学校:有效和高效地实施的hashCode()
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
之间的合同。
你是对的 - 任何与“或”的平等检查都会违反传递性。 – 2013-05-11 18:21:07
我不明白你的意思。当然,你可以'返回1' - 但是这样做是无用的,因为你的类不能在'HashMap'和'HashSet'中工作。你用什么“equals”方法? – 2013-05-11 18:24:25
我认为你最好的选择是离开'equals'和'hashCode'并创建一个方法来检查它。覆盖这些方法的原因是,'Collection'使用'equals'方法而不是使用'=='的默认方式来尊重相等性。 – 2013-05-11 18:28:43