私は 2 セットのLinkedHashSet
オブジェクトを持っています。このオブジェクト内には、より多くのオブジェクトを持つ他のオブジェクトがありますLinkedHashSet
。
私の質問は:
メソッド (デフォルト) は、内部がすべて同じかどうequals
かをチェックしますか? HashSets
それとも上書きする必要がありますか?
私は 2 セットのLinkedHashSet
オブジェクトを持っています。このオブジェクト内には、より多くのオブジェクトを持つ他のオブジェクトがありますLinkedHashSet
。
私の質問は:
メソッド (デフォルト) は、内部がすべて同じかどうequals
かをチェックしますか? HashSets
それとも上書きする必要がありますか?
デフォルトでは、HashSets の内容が equals() であることを確認します。LinkedHashSet も順序付けされていますが、これは hashCode または equals では使用されないため、順序が異なっていても equals = true である可能性があります。
つまり、HashSet の equals の順序は関係なく、"equals" は "same" ではありません。「同じ」は通常、同じオブジェクトを意味します。
の契約Set.equals()
は、各セットのすべてのメンバーが他のセットに含まれていることです。各テストは、セット内のオブジェクトcontains
のメソッドに依存します。equals()
この仕様では、オブジェクト ID であるSet
のデフォルトの実装に依存できない実装が必要です。equals()
(仕様に関する限りSet
、セット内のオブジェクトはデフォルトを自由に使用してObject.equals()
同等性をテストできます。ただし、セットのセットがある場合、(外側の)セット内のオブジェクトはそれ自体がSet
オブジェクトであるため、同じSet
契約に関してequals()
。)
詳細については、Set.equals()
およびのドキュメントを参照してくださいSet.contains(Object)
。