我一直在寻找一种像Arrays.equals(a1, a2)
一样操作但忽略元素顺序的方法。我无法在任何Google集合中找到它(类似于Iterables.elementsEqual()
,但确实考虑了排序)和JUnit(assertEquals()
显然只是在集合上调用equals()
取决于Collection实现,这不是我想要的)
如果这样的方法需要Iterable
s,那将是最好的,但我也可以简单地使用Collection
s
这样的方法当然会考虑集合中的任何重复元素(因此它不能简单地测试containsAll()
)。
请注意,我不是在问如何实现这样的事情,我只是想知道是否有任何标准的Collections库都有它。
答案 0 :(得分:42)
Apache commons-collections有CollectionUtils#isEqualCollection:
如果给定的集合包含具有完全相同基数的完全相同的元素,则返回true。
也就是说,如果a中的e的基数等于b中e的基数,则对于a或b中的每个元素e。
我认为,这正是你所追求的目标。
答案 1 :(得分:29)
这是三个方法调用并使用 Google Collections Guava,但可能很简单:
HashMultiset.create(c1).equals(HashMultiset.create(c2));
创建临时Multiset
可能看起来很浪费,但为了有效地比较集合,您需要以某种方式对它们进行索引。
答案 2 :(得分:3)
如果你想忽略秩序,那么如何测试集合是否相等?
new HashSet(c1).equals(new HashSet(c2))