我有两组LinkedHashSet
个对象,在这个对象中,我有其他对象有更多LinkedHashSet
。
我的问题是:
equals
方法(默认)是否检查所有内部HashSets
是否相同?或者我是否必须覆盖它?
答案 0 :(得分:7)
默认情况下,它将确保HashSet的内容为equals()。 LinkedHashSet也是有序的,但是这不用于hashCode或equals,所以它们可以有不同的顺序,仍然是equals = true。
简而言之,顺序与HashSets的等号无关,而“equals”不是“相同”。 “相同”通常意味着它是同一个对象。
答案 1 :(得分:1)
Set.equals()
的合同是每个集合的每个成员都包含在另一个成员中。每个contains
测试都依赖于集合中对象的equals()
方法。
此规范要求Set
实现不能依赖于equals()
的默认实现,即对象标识。 (就Set
规范而言,集合中的对象可以自由地使用默认的Object.equals()
来测试相等性。但是如果你有一组集合,那么(外部)集合中的对象它们本身就是Set
个对象,因此受Set
equals()
的{{1}}合同约束。
有关详细信息,请参阅Set.equals()
和Set.contains(Object)
的文档。