2011-08-15 13 views
2

Javaのオブジェクトのハッシュコードが変更されるのはなぜですか?それはまったく変わるのですか? ハッシュテーブルとはどのように関連していますか? すべてのオブジェクトに固有のハッシュコードを付ける必要があります。その理由をRehashingしていますか?JavaでObjectのHashcodeが変更されるのはなぜですか?

ありがとうございます。

+2

いつ変更されますか? –

+0

あなたはその変化の例を持っていますか? – Marcelo

+0

多分あなたはこれを読むべきです:http://stackoverflow.com/questions/6051960/how-to-write-a-good-hashcode-for-permutations and this:http://stackoverflow.com/questions/1990734/hashcode -and-equals – panzerschreck

答えて

2

デフォルトのハッシュコードの実装は、オブジェクトIDと同等です。しかし、オブジェクトの中にはハッシュコードをオーバーライドするものがあります。オブジェクトの状態に基づいて変更されるハッシュコードを与えることがあります。

通常、equalsの定義をオーバーライドする場合にこれを行います(実際にはequalsをオーバーライドすると、ハッシュコードをオーバーライドする必要があります)。これは、作成した定義によって同じオブジェクトが同じハッシュコードを返すようにするためです。それ以外の場合は、異なるハッシュコードを返すため、マップに複数の「等しい」オブジェクトが保持される状況が発生する可能性があります。

+2

さらに悪いことに、オブジェクトのハッシュコードはマップ内にある間に変更され、その外部参照は失われます。それを元通りに戻す唯一の方法は、マップ上で反復して、あなたの基準に等しくすることです。 – corsiKa

+1

それは本当に本当に不愉快な考えです。私はその特定の可能性を心配することはありませんでしたが、今私はそうします。優れた名前、btw。 –

関連する問題