2017-06-12 5 views
3

のJava API - クラスオブジェクトユニークなオブジェクトを識別しない場合、ハッシュコードは何が良いですか?

ハッシュコード:

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

2つのオブジェクトが異なる整数結果を生成できる場合、どのような整合性がハッシュによって達成されますか? 2つの異なるオブジェクトが同じハッシュ値を返すことが奇妙に思えます。

+0

ハッシュ衝突を見に比べセーバー膨大な時間だハッシュの一部と小包です、それは無限の持っていないとの問題点の一つですメモリ。 –

+3

ハッシュコードは、大きな値の空間をより小さな値の空間にマッピングしたものです。一意性の意味はありません。 – EJP

+0

一意性は相対的な用語です。本当にユニークなオブジェクトについて話しているなら、それはそのメモリアドレスによって定義されます。一意性について話している場合、コレクションをハッシングする場合、ハッシュコードとequalsメソッドの組み合わせによって定義され、2つの異なるオブジェクトが同じハッシュコードを持ち、メソッドに等しいことを妨げるものはありません。 – tsolakp

答えて

4

ハッシュコードが持つことができる整数値は、(Javaでは少なくとも)2つだけです。それよりも多くのオブジェクトがある場合、同じハッシュ値を持つ2つの異なるオブジェクトは避けられません。これらを避けるために最善を尽くしますが、しばしば数学的には不可能です(pigeonhole principle参照)。

通常、ハッシュ関数の出力がその範囲内で均等に分布するように設計し、衝突をまれにするようにします。

+1

それは助けて!私はそれを推測しましたが、私は陽性ではありませんでした。ありがとう! –

1

一意のオブジェクトを識別しない場合、どのようなハッシュコードが良いでしょうか?

ハッシュコードを使用すると、独自のオブジェクトを識別することはできませんが、それははあなたがオブジェクトがであることをユニークグループを識別できない。

あなたはその後、そのグループだけを考慮する必要がありますあなたのオブジェクトを見つける。

たとえば、HashMapには500個のアイテムが1,000個のグループに分割されている場合があります。ハッシュコードのおかげで、見るべき1000のグループのうちのどれをすぐに知り、999人を拒否します。そのグループは、0を持っているかどうか

、1つのあるいは6つの要素は、それはまだ、すべての500

関連する問題