Есть ли способ проверить, содержат ли две коллекции одни и те же элементы, независимо от порядка?

Я искал метод, который работает как Arrays.equals(a1, a2) , но игнорирует порядок элементов. Я не смог найти его в Google Collections (что-то вроде Iterables.elementsEqual() , но это учетная запись для заказа), а JUnit ( assertEquals() очевидно, просто вызывает equals() в коллекции, которая зависит от коллекции реализация, и это не то, что я хочу). Было бы лучше, если бы такой метод использовал Iterable s, но я тоже прекрасно разбираюсь в Collection Такой метод, конечно, учитывал бы любые повторяющиеся элементы в коллекции (так он не может просто проверить для containsAll() ).

Заметьте, что я не спрашиваю, как реализовать такую ​​вещь, мне просто интересно, есть ли в ней библиотека стандартных коллекций.

    В коллекциях коллекций Apache есть CollectionUtils # isEqualCollection :

    Возвращает true, если данные коллекции содержат точно такие же элементы с точно такой же мощностью.

    То есть, если мощность e в a равна мощности e в b, для каждого элемента e в a или b.

    Что, я думаю, именно то, что вам нужно.

    Это три метода вызова и использует Google Collections Guava , но, возможно, так же просто, как и получается:

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

    Создание временного Multiset s может показаться расточительным, но для эффективного сравнения коллекций вам нужно как-то их индексировать.

    Если вы хотите игнорировать порядок, то как насчет наборов тестов для равенства?

     new HashSet(c1).equals(new HashSet(c2)) 
    Давайте будем гением компьютера.