[英]Does .equals on Hashset return true regardless of order?
对于java中的Hashset,有一个.equals方法,用于比较每个集合中的元素。 无论订单如何,这都会恢复吗?
例如,假设我们有一个元素集{a,b,c},另一个集合元素{b,c,a}
如果你在这两个集合上使用.equals它会返回true,还是必须进行排序?
这应该返回true。 文件说:
将指定对象与此set进行相等性比较。 如果给定对象也是一个集合,则返回true,两个集合具有相同的大小,并且给定集合的每个成员都包含在此集合中。 这可确保equals方法在Set接口的不同实现中正常工作。
Java HashSet
是无序的 - 它们没有排序 。 因此,您的问题根本无法被提出。 集合{a,b,c}
与集合{b,c,a}
。 也就是说, HashSet
继承了AbstractSet#equals(Object)
,它告诉我们以下内容:
将指定对象与此set进行相等性比较。 如果给定对象也是一个集合,则返回
true
,两个集合具有相同的大小,并且给定集合的每个成员都包含在此集合中。 这可确保equals
方法在Set
接口的不同实现中正常工作。
HashSet
实现了Set
接口(对数学集抽象建模),它不包含任何订单信息,因此sort在集合中没有任何意义。 因此, Set
equals
仅考虑成员并忽略成员的顺序。
是的,这是真的,因为Set没有隐含的顺序。
您可以通过添加Comparator或使用Set的特殊情况(例如TreeSet)将顺序应用于集合。
顺便提一下,哈希码用于集合中的快速比较。 根据equals合约,任何被视为“相等”的对象必须具有相同的哈希码。
这意味着Set只需要在不太可能发生的hashcode colission事件中回退到更耗时的方法。
哈希本质上是一个无序列表,所以是的,
如果散列A包含{1,2,3,4,5},而散列B包含{3,1,5,4,2},那么它们将是相等的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.