Das Durchlaufen einer Sammlung, die Vermeidung ConcurrentModificationException beim entfernen von Objekten in einer Schleife

Wir alle wissen, kann man nicht tun:

for (Object i : l) {
    if (condition(i)) {
        l.remove(i);
    }
}

ConcurrentModificationException etc... dieses anscheinend funktioniert manchmal, aber nicht immer. Hier sind einige spezifische 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 tun es nicht... wie auch immer.

Was ist die beste Lösung für dieses problem? Wie kann ich Sie entfernen ein Element aus der Auflistung in einer Schleife, ohne daß diese Ausnahme?

Ich bin auch mit einem beliebigen Collection hier, nicht unbedingt ein ArrayList, so können Sie sich nicht darauf verlassen, dass get.

Hinweis an den Leser: haben Sie eine Lesen des docs.oracle.com/javase/tutorial/collections/interfaces/..., es kann ein einfacher Weg, das zu erreichen, was Sie wollen zu tun.

InformationsquelleAutor Claudiu | 2008-10-21

Schreibe einen Kommentar