ホームページ  >  記事  >  Java  >  Java のオーバーライドされていないオブジェクトに対して「hashCode()」メソッドはどのように機能しますか?

Java のオーバーライドされていないオブジェクトに対して「hashCode()」メソッドはどのように機能しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-31 17:08:30133ブラウズ

How Does the `hashCode()` Method Work for Non-Overridden Objects in Java?

Java でオーバーライドされていないオブジェクトのハッシュ コードを理解する

Java では、オブジェクトは Object クラスから hashCode() メソッドを継承します。このメソッドは、オーバーライドされていない場合、オブジェクトの一意の識別子を生成するためのデフォルトの実装を提供します。

デフォルトのハッシュ コードとは何ですか?

hashCode()メソッドがオーバーライドされない場合、HotSpot JVM は特定の動作に従ってハッシュ コードを生成します:

  1. 最初の呼び出し時の乱数: hashCode() または System.identityHashCode の最初の呼び出し時、乱数が生成され、オブジェクトのヘッダーに保存されます。
  2. 後続の呼び出し: 後続の呼び出しでは、この保存された値が取得されます。

JVM ハッシュ コードオプション

デフォルトのハッシュ コード生成の動作は、-XX:hashCode=n HotSpot JVM オプションを使用してカスタマイズできます。可能な値は次のとおりです:

  • 0: グローバルランダムジェネレーターを使用します (Java 7 のデフォルト)
  • 5: スレッドローカルの xor-shift ランダムジェネレーターを使用します (Java 8 のデフォルト)
  • 1: ランダムな値と混合したオブジェクト ポインターを使用します (GC サイクル間で安定)
  • 2: 常に 1 を使用します
  • 3: 自動インクリメント数値を使用します
  • 4: 使用しますオブジェクト ポインタが 32 ビットにトリミングされました

注: -XX:hashCode=4 を指定しても、オブジェクトは移動される可能性があるため、ハッシュ コードは必ずしも正確なオブジェクト アドレスを指すとは限りません記憶の中で。さらに、オブジェクトのアドレスが均等に分散されていないため、ハッシュ テーブルの不均衡が生じる可能性があります。

したがって、オブジェクトに特定のハッシュ コードの動作が必要な場合は、hashCode() メソッドのオーバーライドを検討することが重要です。

以上がJava のオーバーライドされていないオブジェクトに対して「hashCode()」メソッドはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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