Найти в Дзене
DEBAGanov

Java 410. Как найти пересечение двух массивов в Java?

Чтобы найти пересечение двух массивов в Java, можно использовать различные подходы. Рассмотрим несколько из них.

  • С помощью метода retainAll(): этот метод используется для нахождения общих элементов между двумя коллекциями. Мы можем преобразовать каждый из двух массивов в коллекцию и затем использовать метод retainAll() для получения только тех элементов, которые являются общими для обоих массивов.
Integer[] arr1 = {1, 2, 3, 4, 5};
Integer[] arr2 = {4, 5, 6, 7, 8};

Set<Integer> set1 = new HashSet<>(Arrays.asList(arr1));
Set<Integer> set2 = new HashSet<>(Arrays.asList(arr2));

set1.retainAll(set2); // Оставляем только общие элементы
Integer[] intersection = set1.toArray(new Integer[0]);

System.out.println(Arrays.toString(intersection)); // [4, 5]

Здесь мы создаем два массива arr1 и arr2, преобразуем их в коллекции HashSet, чтобы убрать дубликаты, и затем используем метод retainAll() для получения только тех элементов, которые являются общими для обоих массивов.

  • С помощью вложенных циклов: другой способ заключается в том, чтобы перебрать элементы одного массива и проверить, содержится ли каждый элемент во втором массиве. Если да, то мы можем добавить его в новый массив.
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = {4, 5, 6, 7, 8};

List<Integer> list = new ArrayList<>();

for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr2.length; j++) {
if (arr1[i] == arr2[j]) {
list.add(arr1[i]);
break;
}
}
}

Integer[] intersection = list.toArray(new Integer[0]);

System.out.println(Arrays.toString(intersection)); // [4, 5]

Здесь мы создаем два массива arr1 и arr2, и затем используем два вложенных цикла для перебора всех элементов обоих массивов. Если мы находим одинаковые элементы, то добавляем их в список. В конце мы преобразуем список в массив.

В зависимости от условий задачи можно выбрать подходящий способ для нахождения пересечения двух массивов в Java.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov