私は今、Apache commons langのHashCodeBuilderのような組み込みユーティリティを利用できることを知っていますが、自分でそれを実装する方法を理解しようとしていて、http://en.wikipedia.org/wiki/Java_hashCodeでEmployeeクラスのhascode関数の例に出くわしました()
Googleのどこでも、ゼロ以外の値に奇数の素数を掛けてからインスタンス変数と合計するなど、同じ種類の手法が提案されています(インスタンス変数に対して実行します)。
質問:-
1) 一意であるため、employeeId を hascode として返すことができないのはなぜですか。シンプルで、hascode の目的を果たします。ユニークでない場合は、おそらくそのようなテクニックが必要です。そうですか?
2)従業員IDが一意ではない場合でも、奇数の素数を掛けることが提案されているのはなぜですか? なぜいまいましい整数を取ることが良いと見なされないのですか?
アップデート:-
ピーター私はあなたがそれが印刷されたと述べた例を実行しました
[0, 32, 64, 96, 128, 160, 192, 224, 288, 256, 352, 320, 384]
[0, 32, 64, 96, 128, 160, 192, 224, 288, 256, 352, 320, 384]
私はあなたがあなたの答えで述べたように概念を理解することを期待していたように、今のところその出力を想定しています
[373, 343, 305, 275, 239, 205, 171, 137, 102, 68, 34, 0]
[0, 34, 68, 102, 137, 171, 205, 239, 275, 305, 343, 373]
コメントで示唆したように、この例では、一意のハッシュコードでも同じバケットになる可能性があることを示しました。この例は、この動作をどのように示しましたか? integers の場合は 373 で、integers2 の場合は 0 が同じバケットになるということですか?
この例で素数はどの程度役に立ち、34 は役に立たなかったのでしょうか?