Durchlaufen einer Auflistung, wobei ConcurrentModificationException beim Entfernen von Objekten in einer Schleife vermieden wird
Wir alle wissen, dass Sie das nicht können:
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
ConcurrentModificationException
usw ... das funktioniert anscheinend manchmal, aber nicht immer. Hier ist ein spezieller Code:
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);
}
Dies führt natürlich zu:
Exception in thread "main" java.util.ConcurrentModificationException
... obwohl mehrere Threads es nicht tun ... Wie auch immer.
Was ist die beste Lösung für dieses Problem? Wie kann ich ein Element in einer Schleife aus der Sammlung entfernen, ohne diese Ausnahme auszulösen?
Ich benutze auch eine beliebigeCollection
hier nicht unbedingt einArrayList
Darauf können Sie sich nicht verlassenget
.