java сравнить два массива

Предсказать вывод следующей программы Java.

ссылка на сайт
brightness_4
код

В Java href = «/ g-fact-65 /» target = «_ blank»> Массивы являются объектами первого класса. В приведенной выше программе arr1 и arr2 являются двумя ссылками на два разных объекта. Поэтому, когда мы сравниваем arr1 и arr2, сравниваются две ссылочные переменные, поэтому мы получаем вывод «Not Same» (см. Это для большего количества примеров).

Как сравнить содержимое массива?
Простой способ — запустить цикл и сравнить элементы один за другим. Java предоставляет прямой метод Arrays.equals () для сравнения двух массивов. На самом деле, существует список методов equals () в классе Arrays для различных примитивных типов (int, char, ..etc) и один для типа Object (который является основой всех классов в Java).

ссылка на сайт
brightness_4
код

Как глубоко сравнить содержимое массива?
Как видно выше, Arrays.equals () работает нормально и сравнивает содержимое массивов. Теперь вопросы, а что, если массивы содержат массивы внутри них или некоторые другие ссылки, которые ссылаются на другой объект, но имеют одинаковые значения. Например, см. Следующую программу.

ссылка на сайт
brightness_4
код

Поэтому Arrays.equals () не может делать глубокое сравнение. Java предоставляет другой метод для этого Arrays.deepEquals (), который выполняет глубокое сравнение.

ссылка на сайт
brightness_4
код

Как работает Arrays.deepEquals ()?
Он сравнивает два объекта с использованием любых пользовательских методов equals (), которые они могут иметь (если у них реализован метод equals (), отличный от Object.equals ()). Если нет, то этот метод будет затем рекурсивно сравнивать объекты поле за полем. При обнаружении каждого поля оно будет пытаться использовать производное equals (), если оно существует, в противном случае оно продолжит повторение.
Этот метод работает с циклическим графом объектов следующим образом: A-> B-> C-> A. У него есть обнаружение цикла, поэтому можно сравнивать ЛЮБЫЕ два объекта, и он никогда не войдет в бесконечный цикл (Источник: https://code.google.com/p/deep-equals/ ).

Упражнение: предсказать вывод следующей программы

ссылка на сайт
brightness_4
код

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

Как сравнить два массива по размеру и по содержанию?

В классе с конструктором я создал этот метод equals() :

Вот как у меня это в классе, с которым я тестирую, и я все же получаю false вместо true :

4 ответа

otherArray имеет тип VarArray и вы сравниваете его с массивом int s. Вы хотите:

используйте Arrays.equals(testArray, testArray2);

Неправильное обращение с равными. В вашем случае он вызовет метод equals массива, который будет сравнивать экземпляр объекта обоих массивов, которые являются разными. Правильная реализация метода equals будет выглядеть так:

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

5 ответов 5

Здесь все очень просто. Сначала вы должны выбрать любой массив (например, number1), по которому поочередно будете сравнивать со всеми элементами второго массива, если вы найдете совпадение, то вложенный цикл отменяем командой break(). Вообще это общий случай, который не оптимизирован: если у вас допустим в number1 будут одинаковые элементы, то вы все равно будете сравнивать элементы другого массива.

Ну, или не изобретать велосипед и воспользоваться java.util.Array.equals(number1, number2)

Воспользуемся «резиновым» массивом ArrayList , где T — тип элементов, который хранит массив. Пусть arr — переменная типа ArrayList . Отмечу, что в угловых скобках не могут быть примитивные типы — только ссылочные. int заменяется на Integer , double — на Double , long — на Long и т. д. (напоминаю, что регистр имеет значение). Этими типами можно работать как с обычными переменными.

Для нашего массива будут справедливы следующие утверждения:

arr.add(a) — добавляет в конец массива элемент a . Он должен конвертироваться в тип T . В нашем случае — в Integer . int в Integer легко преобразуется

arr.contains(a) — проверяет, есть ли элемент a в нашем массиве. Если это так, получаем true , в ином случае — false

arr.sort(null) — сортирует элементы массива по возрастанию. Или по другому правилу, если его указать вместо null

Таким образом, данная задача решается таким образом:

P. S. На самом деле ArrayList не массив, а список.

Оцените статью