Java – Поиск, подсчет и удаление повторяющихся элементов из массива

Научитесь находить, подсчитывать и удалять все повторяющиеся элементы из массива в Java, используя такие методы, как Streams, Map и Set из фреймворка Collections.

Мы будем использовать следующий массив значений Integer. Логика остается той же и для других типов данных.

1. Использование потока и карты

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

Map<Integer, Long> map = Arrays.stream(numArray).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); //{1=2, 2=1, 3=2, 4=1, 5=2}

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

Map<Integer, Long> map = new HashMap<>();for(int i : numArray) {if(map.containsKey(i)) { //this element is in the map alreadymap.put(i, map.get(i) + 1);} else { //found a new elementmap.put(i, 1L);}}

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

 long duplicateCount = map.keySet().stream().filter(k -> map.get(k) > 1).collect(Collectors.counting());System.out.println("Count of duplicate elements : " + duplicateCount);Integer[] duplicateElementsArray = map.keySet().stream().filter(k -> map.get(k) > 1).toArray(Integer[]::new);System.out.println("Duplicate elements in the array : " + Arrays.toString(duplicateElementsArray));Integer[] uniqueElementsArray = map.keySet().stream().filter(k -> map.get(k) == 1).toArray(Integer[]::new);System.out.println("Unique elements in the array : " + Arrays.toString(uniqueElementsArray));

Вывод программы.

Count of duplicate elements : 3Duplicate elements in the array : [1, 3, 5]Unique elements in the array : [2, 4]

2. Использование Stream и Set

Класс Java Set хранит только отдельные элементы. Мы можем использовать эту функцию для поиска отдельных элементов в массиве, а затем находить уникальные и дублирующие элементы с помощью простых операций добавления и удаления.

Следующий код пытается добавить все элементы из массива в HashSet. Операция add() возвращает false для дубликатов элементов, которые уже присутствуют в Set.

Integer[] numArray = new Integer[]{1, 2, 3, 4, 5, 1, 3, 5};Set<Integer> distinctElementsSet = new HashSet<>();Integer[] duplicateElementsArray = Arrays.stream(numArray).filter(e -> !distinctElementsSet.add(e)).toArray(Integer[]::new);System.out.println("Duplicate elements in the array : " + Arrays.toString(duplicateElementsArray)); //1, 3, 5]int duplicateCount = duplicateElementsArray.length;System.out.println("Count of duplicate elements : " + duplicateCount); //3

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

distinctElementsSet.removeAll(Arrays.asList(duplicateElementsArray));Integer[] uniqueElementsArray = distinctElementsSet.toArray(Integer[]::new);System.out.println("Unique elements in the array : " + Arrays.toString(uniqueElementsArray)); //[2, 4]

3. Заключение

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

Исходный код Скачать

Прокрутить вверх