Sobes.tech
Junior — Middle

Co się dzieje, jeśli uniemożliwimy usuwanie elementów z kolekcji podczas jej iteracji?

sobes.tech AI

Odpowiedź od AI

Jeśli podczas iteracji po kolekcji w Java spróbujesz usunąć elementy bezpośrednio z niej (np. za pomocą metody kolekcji), spowoduje to ConcurrentModificationException. Dzieje się tak, ponieważ iterator śledzi zmiany w kolekcji, a usuwanie poza jego metodami narusza integralność iteracji.

Poprawny sposób usuwania elementów podczas iteracji to użycie metody remove() samego iteratora:

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if (warunek) {
        iterator.remove(); // bezpieczne usunięcie
    }
}

W ten sposób usuwanie nie zakłóci działania iteratora i nie wystąpi wyjątek.