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!