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 einArrayListDarauf können Sie sich nicht verlassenget.

Antworten auf die Frage(20)

Ihre Antwort auf die Frage