web-dev-qa-db-ja.com

Javaのハッシュコードメソッドの目的は何ですか?

equals()compareTo()メソッドがある場合、Javaにhashcode()メソッドがあるのはなぜですか?

HashTableを使用する場合、hashcode()メソッドをオーバーライドする必要があります。ランダムキーへの高速アクセス以外に特別な理由はありますか? hashcode()メソッドをオーバーライドする場合、考えられる実装は何でしょうか?

Javaはメモリ内のオブジェクトの一意性をどのように保証しますか?


Hashcodes are typically used to enhance the performance of large collections of data

hashingでは、hash codeを計算します。これは追加のタスクです。コレクションに追加される各オブジェクトに対して追加の操作を行うとき。パフォーマンスはどのように向上しますか?

15
MaheshVarma

equalshashCodeは、相互に依存する規約を満たすために、常にタンデムでオーバーライドする必要があります。それらを矛盾して実装するクラスは、最低限のソフトウェアエンジニアリング標準でさえ、単に壊れて受け入れられません。

whyについては、ハッシュテーブルのデータ構造を使用することになります。これは、ランダムアクセスのKey-Valueストレージで最も高速なオプションだからです。

12
Marko Topolnik
2
Ajay Bhojak

compareToメソッドを使用して、オブジェクトの "total order" を確立します。全体の順序はかなり弱い特性です。あるオブジェクトが別のオブジェクトよりも「小さい」かどうかを知ることができるだけですが、2つのオブジェクトが「どれだけ離れている」かはわかりません。

たとえば、Key-Valueデータ構造にN個のオブジェクトがあり、特定のキーの値を検索したい場合などです。注文の合計のみがある場合、一致するキーを見つけるには少なくともO(log N)の比較が必要です。

ハッシュコードは、2つのオブジェクトがいくらか似ているか完全に異なるかを示すことができるため、より強力なプロパティです。これのおかげで、ハッシュテーブルはO(1)演算を使用してキーの値を見つけることができます。

1
Joni