Как сравнить два массива объектов в Java?

У меня есть два массива объектов:

Object[] array1 = {0, 1, 2, 3}; Object[] array2 = {0, 1, 2, 3}; 

Я хотел бы знать, равны ли массивы. Я определяю равным, так как каждое значение в массиве 1 совпадает с значением в этой позиции в массиве2. Таким образом, эти два массива будут равны.

Какое лучшее, почему нужно выяснить, равны ли эти два массива?

 if(array1 == array2) 

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

Изменить: мне нужны равные, которые могут входить в вложенные массивы.

Используйте Arrays.deepEquals() . Это выполняет ту же работу, что и Arrays.equals() но также работает с вложенными массивами.

Возвращает true, если два указанных массива глубоко равны друг другу. В отличие от метода equals(Object[],Object[]) , этот метод подходит для использования с вложенными массивами произвольной глубины.

Две ссылки на массивы считаются глубоко равными, если оба они являются нулевыми или относятся к массивам, которые содержат одинаковое количество элементов, и все соответствующие пары элементов в двух массивах глубоко равны.

Два, возможно, нулевые элементы e1 и e2 являются глубоко равными, если выполнено одно из следующих условий:

  • e1 и e2 – оба массива типов ссылочных объектов, а Arrays.deepEquals (e1, e2) вернет true
  • e1 и e2 – массивы одного и того же примитивного типа, и соответствующая перегрузка массивов. equals (e1, e2) вернет true.
  • e1 == e2
  • e1.equals (e2) вернет true.

Обратите внимание, что это определение допускает нулевые элементы на любой глубине.

Если любой из указанных массивов содержит себя как элементы либо прямо, либо косвенно через один или несколько уровней массивов, поведение этого метода не определено.

java.util.Arrays.equals

  /** * Returns true if the two specified arrays of Objects are * equal to one another. The two arrays are considered equal if * both arrays contain the same number of elements, and all corresponding * pairs of elements in the two arrays are equal. Two objects e1 * and e2 are considered equal if (e1==null ? e2==null * : e1.equals(e2)). In other words, the two arrays are equal if * they contain the same elements in the same order. Also, two array * references are considered equal if both are null.

* * @param a one array to be tested for equality. * @param a2 the other array to be tested for equality. * @return true if the two arrays are equal. */ public static boolean equals(Object[] a, Object[] a2)

Чтобы сравнить массивы, я бы использовал метод Arrays.equals:

 if (Arrays.equals(array1, array2)) { // array1 and array2 contain the same elements in the same order } 

В примере, который вы разместили, массивы будут содержать объекты Integer . В этом случае достаточно Arrays.equals() . Однако, если ваши массивы содержат некоторые ваши объекты, вы должны реализовать equals() в своем classе, чтобы Arrays.equals() работал

Обычно полезный class java.util.Arrays очень полезен.

  • Если два массива считаются равными, оба массива содержат одинаковое количество элементов, а все пары элементов в двух массивах равны, используя Arrays.equals .
  • Если две ссылки на массивы считаются глубоко равными, если оба они являются нулевыми, или если они относятся к массивам, которые содержат одинаковое количество элементов, и все соответствующие пары элементов в двух массивах глубоко равны, используйте Arrays.deepEquals . Этот метод подходит для использования с вложенными массивами произвольной глубины.

array1.equals(array2) должен дать вам то, что вы ищете.