Как найти дубликаты в List
[Как найти дубликаты в List]
Иногда требуется найти дубликаты в существующем списке. Например, это может быть список строк или чисел. Это довольно легко сделать методом перебора.
Решение
Сперва объявим коллекцию для хранения дублирующихся значений. В качестве такой коллекции лучше взять 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
Поиск дубликатов в List с использованием HashSet.