Javaでは、hashCode()とequals()はどちらもオブジェクトの等価性を処理するために使用されるメソッドですが、それらは異なる役割を持ち、異なる状況で使用されます。
1. hashCode()メソッド
hashCode() メソッドは、オブジェクトのハッシュ コード (ハッシュ コード) を返します。ハッシュ コードは、ハッシュ テーブルなどのデータ構造内のオブジェクトをすばやく見つけるために使用される整数です。Java では、ハッシュ テーブル (HashMap、HashSet など) はハッシュ コードを使用してオブジェクトを格納および取得します。hashCode() メソッドの主な機能は、検索、挿入、削除などの操作の効率を向上させることです。
hashCode() メソッドをオーバーライド (オーバーライド) する場合は、次のルールを保証する必要があります。
· 2 つのオブジェクトが equals() メソッドによって等しいと判断された場合、それらの hashCode() の値は等しい必要があります。
· 2 つのオブジェクトの hashCode() 値が等しい場合、それらは必ずしも等しいとは限りません。
2.equals()メソッド
equals() メソッドは、2 つのオブジェクトが等しいかどうかを比較するために使用されます。デフォルトでは、equals() メソッドはオブジェクト参照を比較します。つまり、2 つのオブジェクトが同じメモリ アドレスを指しているかどうかを判断します。ただし、多くの場合、等しいかどうかの判断ロジックをカスタマイズする必要があるため、equals() メソッドをオーバーライドできます。
equals() メソッドをオーバーライドする場合は、次の規則に従う必要があります。
再帰性: a.equals(a) は常に true を返す必要があります。
対称性: a.equals(b) が true を返す場合、b.equals(a) も true を返す必要があります。
推移性: a.equals(b) が true を返し、b.equals(c) も true を返す場合、a.equals(c) も true を返す必要があります。
· 一貫性: オブジェクトの状態が変化していない限り、a.equals(b) を複数回呼び出しても、常に同じ結果が返される必要があります。
· null 以外の参照 a の場合、a.equals(null) は false を返します。
クラス内のequals()メソッドをオーバーライドする場合、通常、ハッシュ テーブルなどのデータ構造がオブジェクトを正しく処理できるようにするために、同時に hashCode() メソッドもオーバーライドする必要があることに注意してください。
要約:
hashCode() はデータ構造内のオブジェクトをすばやく見つけるために使用され、equals() はオブジェクトが等しいかどうかを判断するために使用されます。これら 2 つのメソッドをオーバーライドする場合は、コレクションなどのデータ構造の問題を回避するために論理的な一貫性を確保してください。