Иногда требуется найти дубликаты в существующем списке. Например, это может быть список строк или чисел. Это довольно легко сделать методом перебора.

Решение

Сперва объявим коллекцию для хранения дублирующихся значений. В качестве такой коллекции лучше взять 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