Sobes.tech
Junior — Middle

Mis juhtub, kui takistame elementide eemaldamist kogumist selle läbimise ajal?

sobes.tech AI

Vastus AI-lt

Kui Java-s kolektsiooni läbides üritate elemente otse sellest eemaldada (näiteks kollektsiooni meetodi kaudu), põhjustab see ConcurrentModificationException. See juhtub seetõttu, et iterator jälgib kollektsiooni muudatusi ning eemaldamine väljaspool selle meetodeid rikub iteratsiooni terviklikkust.

Õige viis elementide eemaldamiseks läbimise ajal on kasutada iteratori enda remove() meetodit:

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if (tingimus) {
        iterator.remove(); // ohutu eemaldamine
    }
}

Sellisel viisil ei häiri eemaldamine iteratori tööd ning viga ei teki.