Jorn Jorn - 12 days ago 8
Java Question

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

I've been looking for a method that operates like

Arrays.equals(a1, a2)
, but ignoring the element order. I haven't been able to find it in either Google Collections (something like
Iterables.elementsEqual()
, but that does account for ordering) and JUnit (
assertEquals()
obviously just calls
equals()
on the Collection, which depends on the Collection implementation, and that's not what I want)
It would be best if such a method would take
Iterable
s, but I'm also fine with simply taking
Collection
s
Such a method would of course take into account any duplicate elements in the collection (so it can't simply test for
containsAll()
).

Note that I'm not asking how to implement such a thing, I was just wondering if any of the standard Collections libraries have it.

Answer

Apache commons-collections has CollectionUtils#isEqualCollection:

Returns true if the given Collections contain exactly the same elements with exactly the same cardinality.

That is, if the cardinality of e in a is equal to the cardinality of e in b, for each element e in a or b.

Which is, I think, exactly what you're after.

Comments