При итерации по ArrayList попытка удалить элементы во время итерации может привести к исключению java.util.ConcurrentModificationException . Это происходит из-за механизма отказоустойчивости ArrayList, который обнаруживает любые изменения в структуре списка во время итерации и генерирует исключение, чтобы предотвратить неожиданные результаты.
Чтобы решить эту проблему, следует рассмотреть два основных подхода:
Этот подход предполагает определение элементов, которые необходимо удалить в цикле, и добавление их в отдельный список. После завершения итерации удалите все элементы из исходного списка с помощью метода removeAll().
ArrayList valuesToRemove = new ArrayList();
for (A a : abc) {
if (a.shouldBeRemoved()) {
valuesToRemove.add(a);
}
}
abc.removeAll(valuesToRemove);
В качестве альтернативы вы можете использовать собственный метод удаления() итератора. Однако обратите внимание, что этот подход требует использования традиционного цикла 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