3

我有两组LinkedHashSet对象,在这些对象中,我还有其他具有更多LinkedHashSet.

我的问题是:

equals方法(默认)是否检查所有内部HashSets是否相同?还是我必须覆盖它?

4

2 回答 2

7

默认情况下,它将确保 HashSet 的内容是 equals()。LinkedHashSet 也是有序的,但这在 hashCode 或 equals 中没有使用,因此它们可以有不同的顺序,但仍然是 equals = true。

简而言之,对于HashSets的equals,顺序无关紧要,“equals”不是“same”。“相同”通常表示其相同的对象。

于 2012-12-09T20:43:49.980 回答
1

契约Set.equals()是每个集合的每个成员都包含在另一个集合中。每个contains测试都依赖于equals()集合中对象的方法。

该规范要求任何Set实现都不能依赖于 的默认实现equals(),即对象标识。(就Set规范而言,集合中的对象可以自由使用默认值Object.equals()来测试相等性。但是如果您有一组集合,则(外部)集合中的对象本身就是Set对象,因此受到相同的约束Set合同有关equals()。)

有关详细信息,请参阅 和 的Set.equals()文档Set.contains(Object)

于 2012-12-09T20:45:36.500 回答