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.
If you want to ignore order, then how about testing sets for equality?
Apache commons-collections has CollectionUtils#isEqualCollection:
Which is, I think, exactly what you're after.
This is three method calls and uses
Google CollectionsGuava, but is possibly as simple as it gets:Creating the temporary
Multiset
s may appear wasteful, but to compare the collections efficiently you need to index them somehow.