CurrentModificationException

  • Dieser Fehler tritt auf, wenn ihr ein Objekt aus einer Liste entfernt, mit der gerade gearbeitet wird.


    Als Beispiel:
    Hier gehe ich in einer For-Schleife alle User durch und entferne ihn gleichzeitig.

    Java
    1. ArrayList<User> user = new ArrayList<User>();
    2. public void remove() {
    3.     for(User u : user) {
    4.         user.remove(u);
    5.     }
    6. }


    Wie löse ich das Problem?



    1. Lösungsansatz: While-Schleife


    Hier erstelle ich eine While-Schleife, die folgende Bedingung hat: ,,Solange die ArrayList user nicht leer ist".
    In der Schlefie wird immer das erste Objekt der ArrayListe entfernt. Dadurch, dass die Schleife nicht direkt mit der ArrayListe arbeitet, gibt es keine Fehler.


    Java
    1. ArrayList<User> user = new ArrayList<User>();
    2. public void remove() {
    3.     while(!user.isEmpty()) {
    4.         user.remove(0);
    5.     }
    6. }

    2. Lösungsansatz: For-Schleife mit ArrayList (Für Bedingungen geeignet)


    Hier wird eine 2. ArrayList erstellt, wo alle user abgespeichert werden, die entfernt werden sollen.
    Danach wird eine 2. For-Schleife diese ArrayList durchgehen und wird alle user, die in der 2. ArrayList sind, in der 1. ArrayList löschen.
    Auch hier wird nicht direkt bei der 2. For-SChleife mit der 1. ArrayList gearbeitet. Diese Art kann z.B. verwendet werden, wenn man eine Bedingung einbauen möchte, wann ein User nur entfernt werden darf.
    Beim Lösungsansatz 1 ist keine Bedingung möglich!



  • Hey,


    Eine weitere Methode (welche auch am meisten genutzt wird) sind Iteratoren (wenn das überhaupt das deutsche Wort dazu ist).


    Kleiner Pseudo-Code (per Hand geschrieben) um das ganze ein wenig zu erklären:


    MfG