Как вы используете класс Iterator для удаления дублирующихся элементов из списка? - PullRequest
0 голосов
/ 27 октября 2019

Я изучаю класс Iterator и как его использовать, и наш учитель поставил перед нами задачу использовать этот класс для циклического прохождения всего List, поиска дубликатов и их удаления. Я пробовал следующий код:

void removeDuplicates(List<String> list) {

    Iterator<String> iterator = list.iterator();

    while (iterator.hasNext()) {

        if (list.contains(iterator.next())) {

            iterator.remove();

        }

    }

}

Конечно, этот код не будет работать, потому что каждый элемент находится в самом List, поэтому он будет удалять каждый элемент в списке, делая егоопорожнить. Как мне исправить это заблуждение (особенно условное выражение if), чтобы я смог Iterator удалить все повторяющиеся элементы?

1 Ответ

1 голос
/ 27 октября 2019

Мне не нравится прямая операция с исходным объектом, возможно в многопоточном параллельном небезопасном.

void removeDuplicates(List<String> list) {
    Set set = new HashSet();
    Iterator<String> iterator = list.iterator();

    while (iterator.hasNext()) {
        Object element = iterator.next();
        if (!set.add(element)){
            iterator.remove();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...