ホームページ  >  記事  >  Java  >  ハッシュコードとイコールの違いは何ですか?

ハッシュコードとイコールの違いは何ですか?

hzc
hzcオリジナル
2020-07-03 11:59:455968ブラウズ

ハッシュコードとイコールの違いは次のとおりです: 1. 2 つのオブジェクトが等しい場合に true を返す場合、hashCode も同じ int 数値を返す必要があります; 2. 2 つのオブジェクト hashCode が同じ int 数値を返す場合、equals は必ずしも一致するとは限りませんtrueを返します。

ハッシュコードとイコールの違いは何ですか?

ハッシュコード: オブジェクトの初期アドレスの整数表現

Java のオブジェクトは JVM によって管理され、JVM が管理します。これは、オブジェクトの移動が適切であると判断した場合に行われます。たとえば、メモリのデフラグが必要な特定の GC アルゴリズムの下で発生する GC です。このとき、オブジェクトのアドレスは変わりますが、ハッシュコードは変わりません。

hashCode はハッシュ構造ストレージ内の検索効率を向上させるためのものであり、線形テーブルには効果がありません。

  1. 一般に、クラスのオブジェクトが HashTable、HashSet、HashMap などのハッシュ ストレージ構造に格納される場合、equals を書き換えた後に hashCode を書き換えるのが最善です。そうしないと、データが一意に格納されなくなります (2 つの等しいデータが格納されます)。これらのハッシュ構造に格納されないと判断された場合は、hashCodeを書き換える必要はありません。

  2. 2 つのオブジェクトが等しい場合に true が返される場合、hashCode も同じ int 数値を返さなければなりません。

  3. 2 つのオブジェクトが等しい場合に false が返される場合、hashCode は必ずしも異なる int 数値を返すわけではありませんが、等しくないオブジェクトに対して異なる hashCode 値を生成すると、ハッシュ テーブルのパフォーマンスを向上させることができます。

  4. 2 つのオブジェクトの hashCode が同じ int 数値を返す場合、equals は必ずしも true を返すとは限りません。

  5. 2 つのオブジェクトの hashCode が異なる int 数値を返す場合、equals は false を返す必要があります。

  6. 実行中に同じオブジェクトがすでにコレクションに格納されている場合、hashCode 値に影響する関連情報を変更することはできません。変更しないと、メモリ リークが発生します。

  7. 一般に、オブジェクト間のサイズを比較する場合は、equals メソッドをオーバーライドする必要があります。

推奨チュートリアル: 「java チュートリアル

以上がハッシュコードとイコールの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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