2

次のように String オブジェクトを生成するクラスがあります。

key = "K:" + this.hashCode();

このクラスは他のクラスから継承せず、hashCode() をオーバーライドしません。重複したキーを取得している状況があるため、オブジェクトの 2 つの異なるインスタンスがまったく同じ hashCode() を返します。

これはどのように発生する可能性があり、それを回避するにはどうすればよいでしょうか? このクラスは私が使用している API の一部であるため、制御することはできませんが、このオブジェクトのインスタンスを作成するたびに待機などを設定できる方法があれば、そのようなことができます。仕事。

4

2 に答える 2

6

それが起こるかもしれません。2 つの異なるオブジェクトに対して同じハッシュコードを取得する場合があります。

Object.hashCode()ドキュメントに従って:

equals(java.lang.Object) メソッドに従って 2 つのオブジェクトが等しくない場合、2 つのオブジェクトのそれぞれで hashCode メソッドを呼び出すと、異なる整数結果が生成される必要はありません。ただし、プログラマーは、等しくないオブジェクトに対して個別の整数結果を生成すると、ハッシュ テーブルのパフォーマンスが向上する可能性があることに注意する必要があります。

それを避けるために何ができますか? 

他の SO の質問で提案されているいくつかのベスト プラクティスを次に示します。

ハッシュコード実装のベスト プラクティス1

ハッシュコード実装のベスト プラクティス2

ただし、これらはベスト プラクティスにすぎず、同じハッシュコードを回避できる保証はありません。あなたの場合、ハッシュコードに依存するべきではないと思います。

于 2013-08-29T18:52:38.327 に答える