Junior — Middle
166
Элементтерін айналып өту кезінде коллекцияны өзгертуге тырысқанда қандай салдарлар болуы мүмкін?
Сұралған компаниялар
ООО Ренью
AI-дан жауап
sobes.tech AI
Java-да итератор көмегімен коллекцияны айналып өтіп жатқанда (мысалы, элементтерді қосу немесе жою) әдетте ConcurrentModificationException қате пайда болады. Бұл итератор коллекцияның күйін құру кезінде бекітетіндіктен, итератор әдістерінен тыс жасалған кез келген өзгерістер дұрыс емес деп саналады.
Осы қатені болдырмау үшін:
- Итератор әдістерін пайдаланып элементтерді жою (
iterator.remove()), олар қауіпсіз. - Коллекцияның көшірмесін жасап, оны айналып өтіп, түпнұсқаны өзгерту.
java.util.concurrent-тен арнайы коллекцияларды пайдалану, олар қауіпсіз параллель өзгерістерді қолдайды.
Қауіпсіз түрде элементтерді айналып өту кезінде жоюдың мысалы:
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (item.equals("removeMe")) {
iterator.remove(); // қауіпсіз түрде ағымдағы элементті жояды
}
}