0

がありSet<Long>、この のすべての値を表すハッシュを作成したいと考えていますSet。後で比較するためにこのハッシュをファイルに保存しますが、元のオブジェクトは保存しません。hashCode()これらすべての値で生成される可能性のある衝突について疑問に思っていlongます。ここで正しいものを使用してhashCode()いますか、それとも他のハッシュアルゴリズムを使用する必要がありますか?

編集:等しいものを比較するオブジェクトがありません。オリジナルを保存していないので、ハッシュを探していると言ったはずです。

4

3 に答える 3

3

心配する必要はありませんhashCode()。オブジェクトが配置される「ビン」を決定するためにのみ使用されます。衝突はOKです。複数のオブジェクトが同じハッシュコードを持つ場合、それらは同じビンに入れられます。オブジェクトを取得するとき、ソフトウェアは再びハッシュコードを使用してビンを取得し、そのビン内の要素のリストをたどり、equals()メソッドを使用して正しいオブジェクトを見つけます。

実際、ほとんどの場合、ハッシュにはいくつかのビンしかないため、数千のハッシュコードが同じビンに入れられる可能性があります。

これはすべて HashMap または HashSet によって行われるため、心配する必要はありません。

于 2013-08-29T20:13:55.547 に答える
1

更新された質問への回答: このハッシュ値を何に使用するかによっては、おそらく hashcode() を使用したくないでしょう。

代わりに、MD5 や SHA-1 などのチェックサム アルゴリズムを使用することをお勧めします。

于 2013-08-29T20:59:27.373 に答える
0

はい、特にオブジェクトを HashMap やその他のタイプの辞書型構造内に格納する場合は、常に equals() と hashCode() をオーバーライドする必要があります。

于 2013-08-29T20:13:00.167 に答える