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むしろnoOfTeachersと の組み合わせはとnoOfStudentsの間の契約に違反しているようです。equalshashCode

4

1 に答える 1

2

クラスの適切な実装が見つかりませんhashCode()。それはあなたのニーズに応えます! equalsメソッドはORクラスのプロパティを使用するためです。メソッドで使用ORすると、任意のオブジェクトの複数の状態が返されます。equalstrue

したがって、一意の戻り値を使用して、hashCode()複数の状態を表すことはできません! さらにhashCode()、オブジェクトに対して一意の値を返す必要があります。それによって複数の値を返すと、オブジェクトを任意のマップに配置するためのあいまいさが生じます (そして確実性が損なわれます)。それは「マップのキーの一意性」の前提に違反しているためです。

于 2013-05-11T18:24:52.677 に答える