Middle
Чӣ гуна рафтор мекунад итератори намунавӣ барои ҷамъоварӣ, агар мо усули collection.remove()-ро даъват кунем?
sobes.tech AI
Ҷавоб аз AI
Ҳамён collection.remove()-ни инстанцирланган итератор ёрдамида итерация вақтида чақириш ConcurrentModificationException-га олиб келиши мумкин.
Бу одатда, итератор одатда, итератордан ташқари асосий тўпламда амалга оширилган ўзгартиришлардан хабарсиз бўлади. Итератор ички ҳолатни сақлайди (масалан, ҳозирги элементнинг индекси), ва агар тўплам итераторнинг ўзида (iterator.remove()) ташқари ўзгартирилса, у нодуруст ҳолатга келади.
Айрим тўпламлар "fail-fast" бўлиши мумкин ва бундай ўзгартиришларни аниқлаганда махсус ConcurrentModificationException-ни ташлайди, бу номуайян ҳаракатларни олдини олиш учун.
Тўпламни итерация вақтида хавфсиз ўzgartиришнинг ягона усули - iterator.remove() методидан фойдаланиш.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorModificationExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
if ("B".equals(element)) {
// Бу `ConcurrentModificationException`-га олиб келади
// list.remove(element);
// Ҳамкорликда олиб ташлаш усули
iterator.remove();
}
}
System.out.println(list);
}
}