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 offenbar 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);
}
Das führt natürlich dazu, dass:
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 aus der Sammlung in einer Schleife entfernen, ohne diese Ausnahme auszulösen?
Ich verwende auch eine willkürliche Collection
hier, nicht unbedingt ein ArrayList
Sie können sich also nicht auf get
.
1 Stimmen
Hinweis an die Leser: Lesen Sie unbedingt die docs.oracle.com/javase/tutorial/collections/interfaces/ kann es einen einfacheren Weg geben, um das zu erreichen, was Sie tun wollen.