簡體   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