Sobes.tech
Junior — Middle

Kas nutinka, jei užkirsti kelią elementų pašalinimui iš kolekcijos jos perėjimo metu?

sobes.tech AI

Atsakymas iš AI

Jei Java metu peržiūrite kolekciją ir bandote ištrinti elementus tiesiogiai iš jos (pavyzdžiui, naudodami kolekcijos metodą), tai sukels ConcurrentModificationException. Tai vyksta todėl, kad iteratorius stebi kolekcijos pakeitimus, ir ištrynimas už jo metodų ribų pažeidžia iteracijos vientisumą.

Tinkamiausias būdas ištrinti elementus peržiūros metu yra naudoti patį iteratoriaus remove() metodą:

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    jei (sąlyga) {
        iterator.remove(); // saugus ištrynimas
    }
}

Šiuo būdu ištrynimas nesutrukdys iteratoriaus darbui ir neįvyks jokia išimtis.