Первое, что нужно отметить, это то, что ваш чек:
if (l.contains(l.get(i)))
всегда будет возвращать true, поскольку вы проверяете, есть ли в списке элемент, полученный из этого списка.Вместо этого вам нужно проверить, есть ли в новом списке этот элемент.И нет необходимости в переменной repeated
.
Вот как это сделать для коротких списков (до 100 элементов):
for (int i = 0; i < l.size(); i++) {
if (!list.contains(l.get(i))) {
list.add(l.get(i));
}
return list;
Проблема с использованием вышеупомянутого для большихсписки в том, что это может быть очень медленным.Каждый раз, когда вы проверяете элемент, вы просматриваете список (это то, что list.contains
делает внутри).Чтобы сделать это быстрее, используйте HashSet
для проверки дубликатов:
Set<E> uniqueValues = new HashSet<>();
for (int i = 0; i < l.size(); i++) {
if (uniqueValues.add(l.get(i))) {
list.add(l.get(i));
}
return list;
Кстати, я предполагаю, что это упражнение в разработке алгоритма.Мы не пишем подобный код в реальном мире, но вместо этого мы используем уже существующие средства, предоставляемые стандартным Java API.