ホームページ >Java >&#&チュートリアル >コレクションに hashCode() を効果的に実装するにはどうすればよいですか?

コレクションに hashCode() を効果的に実装するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-18 07:13:15214ブラウズ

How to Effectively Implement hashCode() for Collections?

コレクションの hashCode() の実装

コレクションの hashCode() の最適な実装は、その使用パターンによって異なります。ただし、Josh Bloch が著書『Effective Java』で提案した広く受け入れられているアプローチの 1 つは次のとおりです。

アルゴリズム:

  1. ゼロ以外の値を割り当てる
  2. で使用される各フィールド f について、値を整数変数の結果に変換します。 quals() メソッド:

    • ブール型フィールドの場合は、(f ? 0 : 1) を計算します。
    • 数値フィールド (byte、char、short、int) の場合は、(int) を計算しますf.
    • 長いフィールドの場合、(int)(f ^ (f >>> 32)).
    • float フィールドの場合は、Float.floatToIntBits(f) を計算します。
    • double フィールドの場合は、Double.doubleToLongBits(f) を計算し、結果を long 値として扱います。
    • オブジェクトフィールドの場合は、オブジェクトの hashCode() メソッドを使用するか、f が次の場合は 0 を使用します。 null.
    • 配列フィールドの場合、各要素のハッシュ値を再帰的に計算し、それらを結合します。
  3. 各ハッシュ値 c と結果を結合します: result = 37 * result c .
  4. 戻る

利点:

  • ほとんどのユースケースでハッシュ値の合理的な分散を提供します。
  • 系統的なアプローチにより一貫性が確保されます。さまざまなデータ型にわたる動作。
  • オブジェクトに影響を与える変更に敏感平等。

以上がコレクションに hashCode() を効果的に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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