Попытка создать метод RetainAll - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь создать метод RetainAll, и после поиска на форумах я не нашел ничего, что могло бы помочь в моем конкретном случае.У меня проблема в том, что при запуске моей программы вместо сохранения всех элементов образуют указанный список и удаления всех остальных, вместо этого остается последний элемент из исходного списка.

public default boolean retainAll(Collection<?> c) {
    boolean modified=false;
    int index =0;

    for(Object e : this) {
        if(c.contains(e)==true) {
        }
        else if(c.contains(e)==false) {
            index=this.indexOf(e);

            this.remove(index);
            modified = true;
        }
    }

    return modified;
}

public default boolean remove(Object e) {
    if (indexOf(e) >= 0) {
        remove(indexOf(e));
        return true;
    }
    else
        return false;
}

Я просто не понимаюкак убрать последний элемент.

1 Ответ

0 голосов
/ 24 февраля 2019

Вы изменяете коллекцию во время итерации по ней.Как правило, это рецепт несчастья.

Для стандартных коллекций безопасный способ - использовать явный итератор и использовать метод итератора «remove» для удаления самой последней возвращенной записи.

Если это ваша собственная реализация коллекции, убедитесь, что модель работает и для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...