hashcode()的有效和高效实现

时间:2013-05-11 18:19:13

标签: java equals 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?我无法想到一个将noOfTeachersnoOfStudents用于计算哈希的策略。相反,noOfTeachersnoOfStudents组合似乎违反了equalshashCode之间的合同。

1 个答案:

答案 0 :(得分:2)

您的课程不会找到任何正确的hashCode()实施方案,这将满足您的需求!因为您的equals方法会将OR用于其类的属性。使用OR方法中的equals会为true返回任意对象的多个状态。

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