对于java中的Hashset,有一个.equals方法比较每个集合中的元素。 无论订单如何,这都会返回吗?
示例,假设我们有一组元素{a,b,c},另一组元素{b,c,a}
如果在这两个集合上使用.equals,它会返回true,还是必须进行排序?
答案 0 :(得分:8)
这应该返回true。 文档说:
将指定对象与此集进行相等性比较。返回true 如果给定对象也是一个集合,则这两个集合具有相同的大小, 并且给定集合中的每个成员都包含在此集合中。这个 确保equals方法在不同方面正常工作 Set接口的实现。
答案 1 :(得分:4)
Java HashSet
s 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},那么它们将是相等的。