Archive for the ‘The geek way of life’ Category
 java.util.ConcurrentModificationException
 java.util.ConcurrentModificationException
Probleme rencontre ce matin en Java 5 (Tiger):
[java]
Vector toto = new Vector();
// ...remplissage du vecteur...
for (Object o : toto){
toto.remove(o);
}
 Cela leve une exception de type:
 java.util.ConcurrentModificationException
 Au debut j’ai pense a un probleme de synchronisation, et donc j’ai ajoute un bloc synchronized(mutex){...}, mais cela n’a pas fonctionne.
 Mais en fait le probleme est different: apparemment cela vient de la facon dont le “foreach” a la Java gere le parcours des elements d’un vecteur (ou de tout autre objet iterable).
La solution que j’ai trouvee consiste a utiliser un “for” classique, qui fonctionne:
[java]
for (int i=0; i<toto.size(); i++){
Object o = toto.elementAt(i);
remove(o);
}
 (je n’ai meme pas tente un remove(i), pour eviter les effets de bord sur les indices)
 Neanmoins ce n’est pas ce qu’il y a de mieux, il aurait fallu utiliser un vrai Iterator, mais pour etre franc j’avais legerement la flemme…