Я могу подумать о двух методах:
- Убедитесь, что они равны по размеру
- Оберните два массива с помощью
Arrays.asList()
- Проверьте, если
a
содержит все элементы из b
public static boolean equals(Object[] a, Object[] b) {
return a.length == b.length && Array.asList(a).containsAll(Arrays.asList(b));
}
Другой способ - просто выполнить итерацию по обоим массивам одновременно, а затем проверить, равны ли элементы:
public static boolean equals(Object[] a, Object[] b) {
if(a.length != b.length) return false;
outer: for(Object aObject : a) {
for(Object bObject : b) {
if(a.equals(b)) continue outer;
}
return false;
}
return true;
}
Обаметоды довольно быстрые, первый вводит дополнительную обертку вокруг массивов, но пренебрежимо мал, поскольку Arrays.asList()
просто использует данный массив как представление и не выполняет никакого дополнительного копирования.
Теперь кажетсячто вы на самом деле сравниваете два Collection
с, то вы можете просто использовать этот подход:
public static boolean equals(Collection<?> a, Collection<?> b) {
return a.size() == b.size() && a.containsAll(b);
}