我有一個類學校:有效和高效地實施的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