"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo evitar la medición de modificaciones concurrentes al modificar una lista de matrices durante la iteración?

¿Cómo evitar la medición de modificaciones concurrentes al modificar una lista de matrices durante la iteración?

Publicado el 2025-03-22
Navegar:947

How to Avoid ConcurrentModificationException When Modifying an ArrayList During Iteration?

concurrentModificationException al modificar una arrayList durante la iteración

la excepción informada es un concurrenteModificationException, que se origina en el intento de modificar un muelle, melementos, mientras que iterando sobre él. Hay un bucle que iterando sobre los melementos usando un iterador para verificar las condiciones específicas:

for (iterator it = melements.iterator (); it.hasnext ();) { Elemento elemento = it.next (); // Verifique la posición del elemento y otras condiciones ... if (element.cflag) { melements.add (nuevo elemento ("crack", getResources (), (int) touchx, (int) touchy)); // concurrentModificationException ocurre aquí 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 (); para (iterator it = melements.iterator (); it.hasnext ();) { Elemento elemento = it.next (); // Verifique la posición del elemento y otras condiciones ... if (element.cflag) { // almacenar el nuevo elemento en una lista separada para la adición posterior ThingStobeadd.add (nuevo elemento ("crack", getResources (), (int) touchx, (int) touchy)); element.cflag = false; } } // Agregar todos los elementos de la lista temporal a la lista principal melements.addall (ThingStobeadd);

Enfoque alternativo:

Otro enfoque es usar un bucle for-ENTRACE mejorado, que itera una copia de la lista, evitando Modificación concurrentexception:

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 );
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3