0

我有一个班级学校:

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哈希计算的策略。相反noOfTeachersnoOfStudents组合似乎违反了 和 之间的equals合同hashCode

4

1 回答 1

2

您不会hashCode()为您的班级找到任何合适的实现,这将满足您的需求!因为您的equals方法使用OR了您的类的属性。OR在方法中使用会equals返回true任何对象的多个状态。

所以使用唯一的返回值hashCode()你肯定不能代表多个状态!还有更多你应该知道的,hashCode()必须返回一个对象的唯一值。由于它返回多个值,会导致将对象放入任何映射中的歧义(并损害确定性)。因为这违反了“地图键的唯一性”的假设。

于 2013-05-11T18:24:52.677 回答