«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как избежать CondurentModificationException при изменении ArrayList во время итерации?

Как избежать CondurentModificationException при изменении ArrayList во время итерации?

Опубликовано в 2025-03-22
Просматривать:246

How to Avoid ConcurrentModificationException When Modifying an ArrayList During Iteration?

comprountModificationException при изменении ArrayList во время итерации

, сообщаемое исключение - это coundrentModificationException, происходящее из попытки изменить ArrayList, Melments, в то время как итерация по нему. Цикл итерации по мелкам с использованием итератора для проверки конкретных условий:

]

для (iterator it = melments.iterator (); it.hasnext ();) { Элемент элемент = it.next (); // Проверьте положение элемента и другие условия ... if (element.cflag) { melments.add (новый элемент ("crack", getresources (), (int) touckx, (int) toblety)); // здесь происходит condurentModificationException element.cflag = false; } }

for (Iterator it = mElements.iterator(); it.hasNext();){
    Element element = it.next();

    // Check element's position and other conditions...

    if(element.cFlag){
        mElements.add(new Element("crack",getResources(), (int)touchX,(int)touchY)); // ConcurrentModificationException occurs here
        element.cFlag = false;
    }
}

Решение:

. Итерация:

list thingStobeadd = new ArrayList (); for (iterator it = melments.iterator (); it.hasnext ();) { Элемент элемент = it.next (); // Проверьте положение элемента и другие условия ... if (element.cflag) { // хранить новый элемент в отдельном списке для последующего дополнения ThingStobeadd.Add (новый элемент ("Crack", getResources (), (int) touckx, (int) turnty)); element.cflag = false; } } // Добавить все элементы из временного списка в основной список melements.addall (thingstobeadd);

List thingsToBeAdd = new ArrayList();
for(Iterator it = mElements.iterator(); it.hasNext();) {
    Element element = it.next();

    // Check element's position and other conditions...

    if(element.cFlag){
        // Store the new element in a separate list for later addition
        thingsToBeAdd.add(new Element("crack",getResources(), (int)touchX,(int)touchY));
        element.cFlag = false;
    }
}

// Add all elements from the temporary list to the main list
mElements.addAll(thingsToBeAdd );
альтернативный подход:

другой подход-это использование улучшенного в целом цикле, который итерат над копией списка, предотвращающий concurrentModificationExcept // Проверьте положение элемента и другие условия ... if (element.cflag) { melments.add (новый элемент ("crack", getresources (), (int) touckx, (int) toblety)); // Нет coundrentModificationException element.cflag = false; } }

]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3