1

私は、最も一般的なJavaコレクションのさまざまなメソッド、操作、および前提条件を調査していますが、少し混乱しています。誰かが次のトピックを明確にすることができれば、私は非常にありがたいです:

1)aとaが正しく機能するためには、メソッドの実装がequals絶対hashCodeに必要ですか?以前の方法を実装しないことの潜在的な影響は何ですか?私は現在、TreeMapとTreeSet(カスタムクラスObjectsの)を使用していますが、これらは、実装とそのメソッド、省略、およびを実行するだけで、これまでのところ正常に機能します。TreeSetTreeMapHashMapComparablecompareToequalshashCode

2)クラスequalshashCodeまたはインターフェイスComparableでさえも強制する場合、すべての派生クラスが、新しい定義や実装なしで、それらのメソッドに従ってコレクションで適切に機能するのに十分ですか?与えられたメソッドは派生クラスにも属しているので、前者は正しいと思います。最終的に何が本当ですか?

4

1 に答える 1

2

HashMap のように、TreeSet と TreeMap が適切に機能するためには、equals メソッドと hashCode メソッドの実装が絶対に必要ですか?

番号。

以前の方法を実装しないことの潜在的な影響は何ですか?

なし。

クラス equals、hashCode、またはインターフェイス Comparable で実装する場合、すべての派生クラスが新しい定義と実装なしでこれらのメソッドに従ってコレクションで適切に機能するだけで十分ですか?

はい、「適切に動作させる」ことは、思ったほど簡単ではありません。通常、キーまたは要素をすべて同じタイプにする必要があります。それらのタイプを混在させることは、めったに良い考えではありません。

TreeMap と TreeSet の場合、Comparable + compareTo OR a Comparator + compare を実装するだけで済みます。

于 2012-12-03T16:20:56.420 に答える