なぜ多くの価値アソシエーションのセットを使用し、それは)等号を(上書きするのに必要であるとhashCode()?

滝:

休止マニュアルあなたが(多くの値の関連を表現するために推奨される方法)を設定するには、永続クラスのインスタンスを配置する予定の場合はequals()とhashCode()メソッドをオーバーライドする必要があると言われています。

だから、質問が登場しました:

  • それをセットに多くの値の関連を表現するための推奨される方法ですなぜ?(私は使用してはならない理由、のは、ArrayListのか、LinkedListのとしましょう)。

  • 何が、私はセットを使用する場合にのみ、私はこれらのメソッドをオーバーライドする必要があることをシーンの後ろになりますか?

ユージン:

さて、どのように他だろうHashSetを推論平等?これはに基づいていますhashCode/equals以下のためにSetあなたは両方の方法を必要とする、ためListのequals(のような方法でのみ使用されているcontainsなど)が、彼らはあなたが変な驚きで実行しないように、両方を定義しています。

一般的にはあなたが上書きしている場合、それは良いことですcompareToから、Comparableとしてウェル-これがために内部的に使用例えばあるHasMapタイが発見された場合。あなたは今までのキーとしてこれらを持つように計画している場合は、に、その何とか良いアイデアではありませんMap

それtie私は2つのハッシュコードが対等であり、ときに使用されたようHashMapに移動することを決定しperfectly balanced tree node、参照ここ、この1あるいは、この1

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=190550&siteId=1