有没有办法检查两个集合是否包含相同的元素,与顺序无关?

2022-09-01 01:26:39

我一直在寻找一种操作方式的方法,但忽略了元素顺序。我无法在Google Collections(类似于,但这确实考虑了排序)和JUnit(显然只是调用Collection,这取决于Collection实现,这不是我想要的)如果这样的方法会采用s,那将是最好的,但我也可以简单地采用s这样的方法当然会考虑集合中的任何重复元素(所以它不能简单地测试 )。Arrays.equals(a1, a2)Iterables.elementsEqual()assertEquals()equals()IterableCollectioncontainsAll()

请注意,我不是在问如何实现这样的事情,我只是想知道是否有任何标准的集合库拥有它。


答案 1

Apache commons-collections有CollectionUtils#isEqualCollection

如果给定的集合包含具有完全相同基数的完全相同的元素,则返回 true。

也就是说,如果 e 在 a 中的基数等于 e 在 b 中的基数,则对于 a 或 b 中的每个元素 e。

我认为,这正是你所追求的。


答案 2

这是三个方法调用并使用Google CollectionsGuava,但可能很简单:

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

创建临时的 s 可能看起来很浪费,但要有效地比较集合,您需要以某种方式为它们编制索引。Multiset


推荐