Вывести одинаковые элементы в двух массивах без повторов

226
22 октября 2021, 17:20

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

public static void main(String[] args) {
    int[] number1 = {2, 3, 4, 3, 6, 7, 6, 8, 2, 9};
    int[] number2 = {2, 3, 6, 8, 5, 1};
    //Прохожу по первому массиву
    for (int i = 0; i < number1.length; i++) {
        //Сохраняю элемент
        int a = number1[i];
        //Прохожусь по второму массиву
        for (int j = 0; j < number2.length; j++) {
            //Сохраняю элемент
            int b = number2[j];
            //Сравниваю элементы
            if (a == b) {
                System.out.print("" + a);
                break;
            }
        }
    }
}
Answer 1

Перед входом в цикл по j для number2 перебирать еще раз массив number1 c k от 0 и пока k < i-1 и если в этом цикле мы найдем элемент совпадающий с текущим проверяемым в массиве number1 (number1[k] == number1[i]) это будет означать что мы его уже обработали и можно пропускать эту итерацию с помощью continue

mainLoop: for(int i = 0; i < number1.length; ++i) {
    for (int k = 0; k < i-1; ++k) {
        if(number1[k] == number1[i]){
            continue mainLoop;
        }
    }
Answer 2
int[] number1 = {2, 3, 4, 3, 6, 7, 6, 8, 2, 9};
int[] number2 = {2, 3, 6, 8, 5, 1};
int[] duplicates = Stream.of(number1, number2)
        // из каждого массива выкидываем
        // повторяющиеся элементы
        // и объединяем массивы
        .flatMap(arr -> Arrays.stream(arr).distinct().boxed())
        // групируем повторяющиеся элементы
        // в карту LinkedHashMap<Integer, Long>
        // с сортировкой в порядке добавления
        .collect(Collectors.groupingBy(Integer::intValue,
                LinkedHashMap::new, Collectors.counting()))
        // обходим карту
        .entrySet().stream()
        // отбираем повторяющиеся элементы
        .filter(e -> e.getValue() == 2)
        // ключи карты - элементы массивов
        .mapToInt(Map.Entry::getKey)
        // собираем в массив
        .toArray();
// выводим результат
System.out.println(Arrays.toString(duplicates)); // [2, 3, 6, 8]
Answer 3

На функционалку ограничения не было))

public static void main(String[] args) {
    int[] number1 = {2, 3, 4, 3, 6, 7, 6, 8, 2, 9};
    int[] number2 = {2, 3, 6, 8, 5, 1};
    Arrays.stream(number1)
            .filter(i -> Arrays.stream(number2)
                    .filter(n -> n == i).findAny().isPresent())
            .distinct()
            .forEach(System.out::println);
}
READ ALSO
Убрать из предложения гласные

Убрать из предложения гласные

Кто может написать код который убирает из предложения гласные к примеру у нас есть предложение hi my name is Nick а нужно получить h m nm s Nck

152
Ошибка при ловле исключений [закрыт]

Ошибка при ловле исключений [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

188
Не запускается Eclipse на Mac OSX

Не запускается Eclipse на Mac OSX

Пытаюсь запустить Eclipse, появляется окно ошибки, которое перенаправляет меня в лог ошибкиПри открытии лога появляется следующая ошибка

269
Java Использование Comparator в сортировке

Java Использование Comparator в сортировке

Подскажите, пожалуйста, как реализовать Comparator при сортировке массиваДано: массив строк

178