Maison > Java > javaDidacticiel > Comment éviter ConcurrentModificationException lors de l'ajout à une ArrayList pendant une itération sous Android ?

Comment éviter ConcurrentModificationException lors de l'ajout à une ArrayList pendant une itération sous Android ?

Barbara Streisand
Libérer: 2024-12-03 07:52:09
original
218 Les gens l'ont consulté

How to Avoid ConcurrentModificationException When Adding to an ArrayList During Iteration in Android?

ConcurrentModificationException lors de l'ajout à ArrayList dans Android

ConcurrentModificationException est couramment rencontré lors de la modification d'une liste en cours d'itération. Cette exception peut survenir dans divers scénarios, dont l'un lors de la modification d'une ArrayList à l'aide d'un itérateur.

Dans l'extrait de code fourni, ce problème se manifeste lors d'un événement OnTouchEvent lors de l'ajout d'un nouvel élément à la mElements ArrayList :

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

    // ...

    if(element.cFlag){
        mElements.add(new Element("crack",getResources(), (int)touchX,(int)touchY));
        element.cFlag = false;
    }
}
Copier après la connexion

L'exception ConcurrentModificationException est levée car la liste est en cours de modification (en ajoutant des éléments) pendant son itération à l'aide de l'itérateur.

Pour résoudre ce problème, il est recommandé d'utiliser une liste distincte pour stocker les éléments qui doivent être ajoutés au cours de l'itération :

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

    // ...

    if (element.cFlag) {
        // Instead of adding elements directly to mElements, add them to thingsToBeAdded
        thingsToBeAdded.add(new Element("crack", getResources(), (int) touchX, (int) touchY));
        element.cFlag = false;
    }
}
mElements.addAll(thingsToBeAdded);
Copier après la connexion

En utilisant cette approche, les modifications à la liste d'origine peut être différé jusqu'après avoir itéré sur les éléments, évitant ainsi l'exception ConcurrentModificationException.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal