Sobes.tech
Back to questions
Junior — Middle
60

Каким образом можно модифицировать содержимое коллекции в процессе её обхода?

Companies where asked
СБЕР ТехСБЕР Тех

Answer from AI

sobes.tech AI

В Java для безопасного модифицирования коллекции во время её обхода рекомендуется использовать итератор с поддержкой удаления или добавления элементов.

Пример с использованием Iterator для удаления элементов:

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(); // безопасное удаление элемента во время обхода
    }
}

Для добавления элементов во время обхода можно использовать ListIterator:

List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
ListIterator<String> listIterator = list.listIterator();
while (listIterator.hasNext()) {
    String item = listIterator.next();
    if (item.equals("b")) {
        listIterator.add("d"); // добавление элемента во время обхода
    }
}

Важно не модифицировать коллекцию напрямую (например, через list.remove()), иначе будет выброшено ConcurrentModificationException.