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