«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как избежать исключения ConcurrentModificationException при удалении элементов из ArrayList во время итерации?

Как избежать исключения ConcurrentModificationException при удалении элементов из ArrayList во время итерации?

Опубликовано 8 ноября 2024 г.
Просматривать:428

How to Avoid ConcurrentModificationException When Removing Elements from an ArrayList During Iteration?

Как обрабатывать исключение ConcurrentModificationException при изменении ArrayList во время итерации

При итерации по ArrayList попытка удалить элементы во время итерации может привести к исключению java.util.ConcurrentModificationException . Это происходит из-за механизма отказоустойчивости ArrayList, который обнаруживает любые изменения в структуре списка во время итерации и генерирует исключение, чтобы предотвратить неожиданные результаты.

Чтобы решить эту проблему, следует рассмотреть два основных подхода:

Вариант 1. Создайте список значений для удаления

Этот подход предполагает определение элементов, которые необходимо удалить в цикле, и добавление их в отдельный список. После завершения итерации удалите все элементы из исходного списка с помощью метода removeAll().

ArrayList valuesToRemove = new ArrayList();

for (A a : abc) {
    if (a.shouldBeRemoved()) {
        valuesToRemove.add(a);
    }
}

abc.removeAll(valuesToRemove);

Вариант 2: используйте Iterator Remove

В качестве альтернативы вы можете использовать собственный метод удаления() итератора. Однако обратите внимание, что этот подход требует использования традиционного цикла for, а не расширенного цикла for.

for (Iterator iterator = abc.iterator(); iterator.hasNext();) {
    A a = iterator.next();
    if (a.shouldBeRemoved()) {
        iterator.remove();
    }
}

Реализуя один из этих подходов, вы можете избежать исключения ConcurrentModificationException, одновременно эффективно изменяя свой ArrayList во время итерации.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3