Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
7 профессий по цене одной
07:05:47:06
дн. ч. мин. сек.
29 Янв 2024
2 мин
76

Обработка ConcurrentModificationException при итерации по коллекции в Java

В Java часто возникает типичная проблема, когда приходится удалять элементы из коллекции во время ее итерации. Например: В этом коде происходит попытка

В Java часто возникает типичная проблема, когда приходится удалять элементы из коллекции во время ее итерации. Например:

List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");

for (String language : list) {
    if (language.equals("Python")) {
        list.remove(language);
    }
}

В этом коде происходит попытка удалить элемент из списка во время его обхода. Это вызывает ConcurrentModificationException, несмотря на то, что операции производятся в одном потоке.

Существуют различные способы решения этой проблемы.

Использование итератора

Один из самых надежных и гибких способов — использование итератора. Итераторы предоставляют метод remove(), который безопасно удаляет текущий элемент из коллекции.

List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String language = iterator.next();
    if (language.equals("Python")) {
        iterator.remove();
    }
}

Использование метода removeIf()

Еще один удобный метод для удаления элементов из коллекции — removeIf(). Этот метод принимает предикат (условие), и удаляет все элементы, которые его удовлетворяют.

List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");

list.removeIf(language -> language.equals("Python"));

Оба этих способа позволяют избежать ConcurrentModificationException и безопасно удалять элементы из коллекции во время ее итерации.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий