无论顺序如何,Hashset上的.equals都会返回true吗?

时间:2013-01-28 04:35:31

标签: java hashset

对于java中的Hashset,有一个.equals方法比较每个集合中的元素。 无论订单如何,这都会返回吗?

示例,假设我们有一组元素{a,b,c},另一组元素{b,c,a}

如果在这两个集合上使用.equals,它会返回true,还是必须进行排序?

5 个答案:

答案 0 :(得分:8)

这应该返回true。 文档说:

  

将指定对象与此集进行相等性比较。返回true   如果给定对象也是一个集合,则这两个集合具有相同的大小,   并且给定集合中的每个成员都包含在此集合中。这个   确保equals方法在不同方面正常工作   Set接口的实现。

答案 1 :(得分:4)

Java HashSets are unordered - 他们没有订购。因此,您的问题根本无法被提出。集合{a,b,c}与集合{b,c,a}相同。也就是说,HashSet继承了AbstractSet#equals(Object),它告诉我们以下内容:

  

将指定对象与此集进行相等性比较。如果给定对象也是一个集合,则返回true,两个集合具有相同的大小,并且给定集合的每个成员都包含在此集合中。这可确保equals方法在Set接口的不同实现中正常工作。

答案 2 :(得分:1)

HashSet实现Set接口(建模数学集抽象),它不包含订单信息,因此排序在集合中没有意义。因此,equals中的Set仅考虑成员并忽略成员的订单。

答案 3 :(得分:1)

是的,这是真的,因为Set没有隐式顺序。

您可以使用添加比较器或使用Set的特殊情况(例如TreeSet)将顺序应用于集合。

顺便提一下,哈希码用于集合中的快速比较。根据equals合约,任何被视为“相等”的对象必须具有相同的哈希码。

这意味着在极少数情况下,如果哈希码被删除,Set只需要回退到更耗时的方法。

答案 4 :(得分:0)

Hash本质上是一个无序列表,所以是的,

如果散列A包含{1,2,3,4,5},而散列B包含{3,1,5,4,2},那么它们将是相等的。