Nous savons tous que vous ne pouvez pas faire ceci:
for (Object i : l) {
if (condition(i))
l.remove(i);
}
ConcurrentModificationException
etc... ce qui, apparemment, fonctionne parfois, mais pas toujours. Voici un code spécifique:
public static void main(String[] args) {
Collection<Integer> l = new ArrayList<Integer>();
for (int i=0; i < 10; ++i) {
l.add(new Integer(4));
l.add(new Integer(5));
l.add(new Integer(6));
}
for (Integer i : l) {
if (i.intValue() == 5)
l.remove(i);
}
System.out.println(l);
}
Ceci, bien sûr, les résultats:
Exception in thread "main" java.util.ConcurrentModificationException
... même si plusieurs threads ne sont pas... de toute façon.
Quelle est la meilleure solution à ce problème? "Meilleur" signifie ici la plupart du temps et de l'espace efficace (je me rends compte que vous ne pouvez pas toujours avoir les deux!)
Je suis également à l'aide d'un arbitraire Collection
d'ici, pas nécessairement ArrayList
, de sorte que vous ne pouvez pas compter sur get
.