3

私は 2 セットのLinkedHashSetオブジェクトを持っています。このオブジェクト内には、より多くのオブジェクトを持つ他のオブジェクトがありますLinkedHashSet

私の質問は:

メソッド (デフォルト) は、内部がすべて同じかどうequalsかをチェックしますか? HashSetsそれとも上書きする必要がありますか?

4

2 に答える 2

7

デフォルトでは、HashSets の内容が equals() であることを確認します。LinkedHashSet も順序付けされていますが、これは hashCode または equals では使用されないため、順序が異なっていても equals = true である可能性があります。

つまり、HashSet の equals の順序は関係なく、"equals" は "same" ではありません。「同じ」は通常、同じオブジェクトを意味します。

于 2012-12-09T20:43:49.980 に答える
1

の契約Set.equals()は、各セットのすべてのメンバーが他のセットに含まれていることです。各テストは、セット内のオブジェクトcontainsのメソッドに依存します。equals()

この仕様では、オブジェクト ID であるSetのデフォルトの実装に依存できない実装が必要です。equals()(仕様に関する限りSet、セット内のオブジェクトはデフォルトを自由に使用してObject.equals()同等性をテストできます。ただし、セットのセットがある場合、(外側の)セット内のオブジェクトはそれ自体がSetオブジェクトであるため、同じSet契約に関してequals()。)

詳細については、Set.equals()およびのドキュメントを参照してくださいSet.contains(Object)

于 2012-12-09T20:45:36.500 に答える