繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM