コレクションの hashCode() の実装
コレクションの hashCode() の最適な実装は、その使用パターンによって異なります。ただし、Josh Bloch が著書『Effective Java』で提案した広く受け入れられているアプローチの 1 つは次のとおりです。
アルゴリズム:
- ゼロ以外の値を割り当てる
-
で使用される各フィールド 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.
- 配列フィールドの場合、各要素のハッシュ値を再帰的に計算し、それらを結合します。
- 各ハッシュ値 c と結果を結合します: result = 37 * result c .
- 戻る
利点:
- ほとんどのユースケースでハッシュ値の合理的な分散を提供します。
- 系統的なアプローチにより一貫性が確保されます。さまざまなデータ型にわたる動作。
- オブジェクトに影響を与える変更に敏感平等。
以上がコレクションに hashCode() を効果的に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。