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

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

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

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

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

if(array1 == array2) 

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

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

Ответ 1

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

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

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

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

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

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

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

Ответ 2

java.util.Arrays.equals

   /**
     * Returns <tt>true</tt> if the two specified arrays of Objects are
     * <i>equal</i> 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 <tt>e1</tt>
     * and <tt>e2</tt> are considered <i>equal</i> if <tt>(e1==null ? e2==null
     * : e1.equals(e2))</tt>.  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 <tt>null</tt>.<p>
     *
     * @param a one array to be tested for equality.
     * @param a2 the other array to be tested for equality.
     * @return <tt>true</tt> if the two arrays are equal.
     */
    public static boolean equals(Object[] a, Object[] a2) 

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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