Sobes.tech
Junior — Middle
87

Бывали ли ситуации, когда при изменении коллекции во время её обхода возникала ошибка ConcurrentModificationException?

Сұралған компаниялар
Prime

AI-дан жауап

sobes.tech AI

Да, ошибка ConcurrentModificationException часто возникает, если во время обхода коллекции (например, ArrayList или HashSet) происходит её изменение (добавление или удаление элементов) не через итератор. Это связано с тем, что итераторы в Java проверяют, не изменялась ли коллекция с момента их создания, и при обнаружении изменений выбрасывают это исключение.

Чтобы избежать ошибки, можно:

  • Использовать итератор и его методы remove() для удаления элементов во время обхода.
  • Использовать коллекции из пакета java.util.concurrent, например CopyOnWriteArrayList, которые поддерживают безопасный обход при изменениях.
  • Собрать изменения и применить их после завершения обхода.

Пример безопасного удаления элементов из списка во время обхода:

List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if (item.equals("b")) {
        iterator.remove(); // безопасное удаление
    }
}