2016-09-30 7 views
-1

javaプログラミング言語では、ハッシュコードメソッドの戻り値の型がintであることがわかっています。だから、2^31を超える別個のオブジェクトは存在できません。本当ですか?はいの場合、2^31を超える別個のオブジェクトを作成するとどうなりますか?2^31以上の異なるオブジェクトを作成するとどうなりますか?

+0

何が起こるか試してみてください。 –

+4

2つの異なるオブジェクトは同じハッシュコードを持つことができます(ハッシュコリジョンと呼ばれます) – fxm

+0

これは特定の言語での特定のハッシュコードの実装に関する疑問です(おそらく 'int'の値が2^31しかない特定のプラットフォーム)。しかし、あなたは私にそれを教えていない。 –

答えて

0

複数のオブジェクトが同じハッシュコードを持つことは全く問題ありません。非常に多くのオブジェクトが問題を引き起こすことはありません(そこに)。

ちょうどそれを試して、常に "42"をハッシュコードとして返すクラスを作成してください。あなたが合理的にequalsメソッドを持っている限り、これらのオブジェクトをHashMapに格納すると正常に動作します。

ただし、のパフォーマンスでは、という広範なハッシュコードを生成することをお勧めします。

1

すぐに重複するハッシュコードが表示されますが、これは問題ではありません。ハッシュコードの重複をもカバーするハッシュコードについての良い記事があります。

直接的な答え:あなたはそれを偽造する必要はありません、それはちょうど起こります! "可能な別個のオブジェクトの数は、通常、可能なハッシュコードの数(2^32)よりも大きいです。明確にするため

「衝突は重要なものではない、それはちょうどそうHashMapの検索は、右のオブジェクトを見つけるために、もう一度見て持っている、単一バケット内に複数のオブジェクトがあることを意味するの多くを。衝突はシステムのパフォーマンスを低下させますが、不正確な結果につながることはありません」

出典:The 3 things you should know about hashCode()

関連する問題