Nous savons tous que vous ne pouvez pas faire ce qui suit à cause de ConcurrentModificationException
:
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
Mais cela fonctionne apparemment parfois, mais pas toujours. Voici un code spécifique:
public static void main(String[] args) {
Collection<Integer> l = new ArrayList<>();
for (int i = 0; i < 10; ++i) {
l.add(4);
l.add(5);
l.add(6);
}
for (int i : l) {
if (i == 5) {
l.remove(i);
}
}
System.out.println(l);
}
Cela se traduit bien sûr par:
Exception in thread "main" java.util.ConcurrentModificationException
Même si plusieurs threads ne le font pas. En tous cas.
Quelle est la meilleure solution à ce problème? Comment puis-je supprimer un élément de la collection dans une boucle sans lever cette exception?
J'utilise également un arbitraire Collection
ici, pas nécessairement un ArrayList
, donc vous ne pouvez pas vous fier get
.