ObjectのデフォルトのhashCode()は、オブジェクトのメモリアドレスを返します。あなたは以下のクラスを持っているのであれば:
class Car {
String make;
String model;
int year;
public Car(String make, String model, int year) {
this.make = make;
this.model = model;
this.year = year;
}
}
は、2つのオブジェクトを作成します。
Car car1 = new Car("Toyota", "Corolla", 2010);
Car car2 = new Car("Toyota", "Corolla", 2010);
car1.hashCode()car2.hashCode()とは異なりますが、各オブジェクトが異なるメモリアドレスを持つことになりますので、 。
car1とcar2の両方で同じハッシュコードを返すようにするにはどうすればよいですか? )これは(car2.hashCodeにcar1.hashCode()は同じになります
@Override
public int hashCode() {
Object[] x = {model, make, Integer.valueOf(year)};
int hashArray = Arrays.hashCode(x);
return hashArray;
}
)String.hashCode(理由:この場合は、次のようにCarクラスのデフォルトオブジェクトのhashCode()メソッドをオーバーライドする必要があります文字列の内容に基づいてhashCodeを計算し、Integer.hashCode()は整数値自体を返します。
Java 7では、Objects.hash(Object ... values)を使用できます。だから、私たちの新しい車のhashCode()は次のようになります。
@Override
public int hashCode() {
return Objects.hash(model, make, year);
}
Objects.hash(オブジェクト...値)はあなたのためをArrays.hashCodeを呼び出します。
最後に、Objects.hashCode(Object o)はnullチェックを行います。オブジェクトがnullの場合は0を返します。それ以外の場合は、オブジェクトhashCode()メソッドを呼び出します。
'hash(o)'と 'hashCode(o)'はどのような状況で同じ値を返しませんか? 'hash()'状態のドキュメント 'Warning:単一のオブジェクト参照が与えられたとき、返された値はそのオブジェクト参照のハッシュコードと等しくありません。 '、しかし私はまだそれを理解するために掘り下げています。 –