ここではIDEによって生成されたhashCode\equals
のサンプルペアだ(その後、最初area
Sを比較するequals()
コードを修正する。):
class Sample {
final int area;
final Set<Integer> someData;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Sample sample = (Sample) o;
if (area != sample.area) return false;
if (!someData.equals(sample.someData)) return false;
return true;
}
@Override
public int hashCode() {
int result = area;
result = 31 * result + someData.hashCode();
return result;
}
}
このコードはsomeData
ができないと仮定しnullにする - 事を単純化する。最初に等価性がチェックされていることがわかります。次にarea
の等価性がチェックされ、等価性がSet<Integer>
にチェックされています。これには内蔵のequals
がSet
であることに注意してください。そうすればそのメソッドを再利用できます。これは、化合物の型が等しいかどうかをテストする慣習的な方法です。
これは、オブジェクトをソートする場合にのみ必要です。もしあなたがそのようなオブジェクトの辞書を持っているだけなら、適切な 'hashCode()'と 'equals()'が必要です。 –