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
Barbara Streisandoriginal
2024-12-03 07:52:09346parcourir

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;
    }
}

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);

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!

Déclaration:
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