Wir alle wissen, dass Sie Folgendes nicht tun können, weil ConcurrentModificationException
:
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
Aber das funktioniert anscheinend manchmal, aber nicht immer. Hier ist ein spezifischer 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
Auch wenn mehrere Threads dies 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 Collection
hier auch eine beliebige , nicht unbedingt eine ArrayList
, also kann man sich nicht darauf verlassen get
.