for(int i=0; i<list.size(); i++) {
                int j = list.get(i);
                list.remove(i);
                if (list.contains(j)) {
                    max.add(j);
                }
            }
            set.addAll(max);
            max.clear();
            max.addAll(set);
Что не правильного в этой проверке? Перелистываем коллекцию, каждый элемент присваиваем переменной, удаляем его из коллекции, проверяем на повтор, если да - добавляем в другую коллекцию, затем в конечной коллекции мы убираем повторы перегнав в set и обратно в list.