Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Это три вызова метода и использует Коллекции Google Guava, но, возможно, так же просто, как и

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

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

Ответ 3

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

new HashSet(c1).equals(new HashSet(c2))