簡體   English   中英

有沒有辦法檢查兩個集合是否包含相同的元素,與訂單無關?

[英]Is there a way to check if two Collections contain the same elements, independent of order?

我一直在尋找一個像Arrays.equals(a1, a2)一樣操作的方法,但忽略了元素順序。 我無法在任何Google Collections中找到它(類似於Iterables.elementsEqual() ,但確實考慮了排序)和JUnit( assertEquals()顯然只是在Collection上調用equals() ,這取決於Collection實現,這不是我想要的)最好是這樣的方法會采用Iterable ,但我也可以簡單地使用Collection s這樣的方法當然會考慮Collection的任何重復元素(所以它不能簡單地測試containsAll() )。

請注意,我不是在問如何實現這樣的事情,我只是想知道是否有任何標准的Collections庫都有它。

Apache commons-collections有CollectionUtils#isEqualCollection

如果給定的集合包含具有完全相同基數的完全相同的元素,則返回true。

也就是說,如果a中的e的基數等於b中的e的基數,則對於a或b中的每個元素e。

我認為,這正是你所追求的。

這是三個方法調用並使用Google Collections Guava ,但可能很簡單:

HashMultiset.create(c1).equals(HashMultiset.create(c2));

創建臨時Multiset可能看起來很浪費,但要有效地比較集合,您需要以某種方式索引它們。

如果你想忽略秩序,那么如何測試集合是否相等?

new HashSet(c1).equals(new HashSet(c2))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM