mercredi 13 juin 2012

[JAVA] ArrayList et ConcurrentModificationException

Bonjour,

ArrayList<String> myList=new ArrayList<String>();
for(String key:myList)
{
    //...
    myList.remove(key);
    //...
}

Lorsque l'on parcours une ArrayList avec un for:each (voir exemple ci-dessus) et que l'on veut supprimer un élément de la ArrayList que l'on parcours, on peut avoir une exception de ce genre :

Exception in thread "Thread-0" java.util.ConcurrentModificationException

Pour éviter ce genre d’exception, on peut soit utiliser une ConcurrentArrayList ou bien tout simplement utiliser un iterator :

ArrayList<String> myList=new ArrayList<String>();
Iterator<String> itMyHashMap=myList.iterator();
while(itMyHashMap.hasNext())
{
    //...
    itMyHashMap.remove();
    //...
}

Il est également possible de faire un clone de la liste que l'on parcours :
for (Object instance : (ArrayList)list.clone())
{
         //...
         list.remove(instance);
         //...
}