ホームページ  >  記事  >  Java  >  Javaにおけるequals(Object)メソッドとhashCode()メソッドの関係と使用法

Javaにおけるequals(Object)メソッドとhashCode()メソッドの関係と使用法

王林
王林オリジナル
2024-01-11 10:59:02839ブラウズ

Javaにおけるequals(Object)メソッドとhashCode()メソッドの関係と使用法

Java のequals(Object) メソッドと hashCode() メソッドは、オブジェクトの同等性を比較するための 2 つの重要なメソッドです。それらの間には密接な関係と相互依存があり、実際の開発において重要な役割を果たします。

まず、equals(Object) メソッドの役割を分析しましょう。 equals(Object) メソッドは Object クラスで定義されたメソッドであり、すべての Java クラスは Object クラスを継承します。 equals(Object) メソッドは、2 つのオブジェクトが等しいかどうかを比較するために使用されます。そのデフォルトの実装では、オブジェクトのメモリ アドレスが比較されます。 equals(Object) メソッドがオーバーライドされていない場合は、オブジェクト参照が比較されます。

ただし、ほとんどの場合、オブジェクトの実際の内容に従って比較する必要があります。たとえば、名前と年齢という 2 つの属性を含む Person クラスを定義します。名前と年齢が等しい場合、2 つの person オブジェクトが等しいとみなされるようにしたいと考えています。このとき、必要に応じて、equals(Object) メソッドを書き直し、比較ルールをカスタマイズする必要があります。

equals(Object) メソッドをオーバーライドするときは、次の原則に従う必要があります。

  1. 対称性: a.equals(b) が true を返す場合、b.equals( a ) も true を返す必要があります。
  2. 再帰性: null 以外の参照値 x に対して、x.equals(x) は true を返す必要があります。
  3. 推移性: a.equals(b) が true を返し、b.equals(c) が true を返す場合、a.equals(c) も true を返す必要があります。
  4. 一貫性: null 以外の参照値 x および y について、オブジェクトを変更せずに x.equals(y) が複数回呼び出された場合、常に true を返すか、常に false を返してから x を返します。 quals( y) これらすべての呼び出しで常に true を返すか、常に false を返します。
  5. equals(null) は false を返す必要があります。

equals(Object) メソッドを書き直すには、hashCode() メソッドの一貫性を確保するために hashCode() メソッドも書き直す必要があることに注意してください。 hashCode() メソッドは、オブジェクトのハッシュ コード (int 型の値) を返します。オブジェクトのハッシュコードは、オブジェクトの属性値から一定のアルゴリズムによって計算されます。 hashCode() メソッドは、検索効率を向上させるためのコレクション クラスなど、Java で多くの用途に使用されます。

hashCode() メソッドの一貫性要件と、equals(Object) メソッドの一貫性要件は相互依存しています。 2 つのオブジェクトが equals(Object) メソッドを呼び出して true を返した場合、それらの hashCode() メソッドは等しい値を返す必要があります。言い換えれば、2 つのオブジェクトが等しい場合、それらのハッシュ コードは等しくなければなりません。したがって、equals(Object) メソッドをオーバーライドする場合は、hashCode() メソッドもオーバーライドする必要があります。

hashCode() メソッドのオーバーライドは、次の原則に従います。

  1. 2 つのオブジェクトの equals(Object) メソッドが true を返す場合、それらの hashCode() メソッドは等しい値を返す必要があります。
  2. 2 つのオブジェクトの equals(Object) メソッドが false を返した場合、それらの hashCode() メソッドは必ずしも異なる値を返すわけではありませんが、異なる値を返すことでハッシュ テーブルのパフォーマンスを向上させることができます。

実際の開発では、IDE ツールを使用して、equals(Object) メソッドと hashCode() メソッドの書き換えコードを自動生成することで、開発効率を向上させることができます。同時に、Apache Commons Lang の EqualsBuilder や HashCodeBuilder などのツール クラスを使用して、書き換えプロセスを簡素化することもできます。

要約すると、equals(Object) メソッドと hashCode() メソッドは、Java でのオブジェクト比較とハッシュ コード計算のための 2 つの重要なメソッドです。それらの間には密接な関係と相互依存があり、実際の開発において重要な役割を果たします。 equals(Object) メソッドをオーバーライドするときは、一貫性とパフォーマンスを確保するために hashCode() メソッドも同時にオーバーライドする必要があります。これら 2 つの方法を正しく理解して使用することで、オブジェクトの比較と集合演算をより適切に実行できるようになります。

以上がJavaにおけるequals(Object)メソッドとhashCode()メソッドの関係と使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。