„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie vermeiden Sie die ConcurrentModificationException bei der Änderung einer ArrayList während der Iteration?

Wie vermeiden Sie die ConcurrentModificationException bei der Änderung einer ArrayList während der Iteration?

Gepostet am 2025-03-22
Durchsuche:832

How to Avoid ConcurrentModificationException When Modifying an ArrayList During Iteration?

ConcurrentModificationException beim Ändern einer Arraylist während der Iteration

Die gemeldete Ausnahme ist eine Übereinstimmung mit einer Übereinstimmung mit der Übereinstimmung mit der Übereinstimmung mit dem Versuch, ein Arraylist zu ändern. Schleifen -Iteration über Melemente unter Verwendung eines Iterators, um nach bestimmten Bedingungen zu überprüfen:

für (iterator it = melements.iterator (); it.hasnext ();) {{ Element Element = it.Next (); // Die Position des Elements und andere Bedingungen überprüfen ... if (element.cflag) { Melements.Add (neues Element ("Crack", getResources (), (int) Touchx, (int) totty); // ConcurrentModificationException tritt hier auf 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 (); für (iterator it = melements.iterator (); it.hasnext ();) { Element Element = it.Next (); // Die Position des Elements und andere Bedingungen überprüfen ... if (element.cflag) { // Speichern Sie das neue Element in einer separaten Liste für eine spätere Ergänzung ThingStobeadd.Add (neues Element ("Crack", getResources (), (int) Touchx, (int) touchy)); element.cflag = false; } } // Fügen Sie alle Elemente aus der temporären Liste zur Hauptliste hinzu melements.addall (ThingStobeadd);

alternativer Ansatz:

Ein anderer Ansatz ist die Verwendung eines erweiterten For-Each-Schleifens, das über eine Kopie der Liste übernommen wird, die gleichzeitige Verhinderung der gleichzeitigen Verhinderung:

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 );
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3