Иногда требуется найти дубликаты в существующем списке. Например, это может быть список строк или чисел. Это довольно легко сделать методом перебора.
Решение
Сперва объявим коллекцию для хранения дублирующихся значений. В качестве такой коллекции лучше взять HashSet. Эта коллекция сама по себе не будет содержать дубликатов.
Set<E> duplicates = new HashSet<>();
Затем мы будем в одном цикле проходить по всем элементам массива, брать каждый элемент и сравнивать его со всеми остальными элементами (но уже во втором цикле):
for (int i = 0; i < a.size(); i++) { E e1 = a.get(i); if (e1 == null) continue; // игнорируем null // сравниваем каждый элемент со всеми остальными for (int j = 0; j < a.size(); j++) { if (i == j) continue; // не проверяем элемент с собой же E e2 = a.get(j); if (e1.equals(e2)) { // дубликат найден, сохраним его duplicates.add(e2); } } }
После этого возвратим список дубликатов:
return new ArrayList<>(duplicates);
Проверка программы
List<String> animals = Arrays.asList("cat", "dog", "cow", "sheep", "cat", "dog"); System.out.println("Входной массив: " + animals); System.out.println("Дубликаты: " + getDuplicatesWithIteration(animals));
Исходный код
package ru.javalessons.arrays; import java.util.*; public class ListFindDuplicates { public static void main(String[] args) { List<String> animals = Arrays.asList("cat", "dog", "cow", "sheep", "cat", "dog"); System.out.println("Входной массив: " + animals); System.out.println("Дубликаты: " + getDuplicatesWithIteration(animals)); } public static <E> List<E> getDuplicatesWithIteration(List<E> a) { Set<E> duplicates = new HashSet<>(); for (int i = 0; i < a.size(); i++) { E e1 = a.get(i); if (e1 == null) continue; // игнорируем null // сравниваем каждый элемент со всеми остальными for (int j = 0; j < a.size(); j++) { if (i == j) continue; // не проверяем элемент с собой же E e2 = a.get(j); if (e1.equals(e2)) { // дубликат найден, сохраним его duplicates.add(e2); } } } return new ArrayList<>(duplicates); } }
Заключение
Довольно простым методом перебора можно найти дубликаты в списке.
Как найти дубликаты в List