Java Iterator remove() Methode

Shubham Vora 12 Oktober 2023
  1. Einführung in die Methode remove() von Collection
  2. Verwenden Sie die remove()-Methode von Collection
  3. Einführung in die Methode remove() von Iterator
  4. Verwenden Sie die Methode remove() des Iterators
Java Iterator remove() Methode

Java-Entwickler müssen beim Iterieren oft das Element oder Objekt aus der ArrayList entfernen.

Hier tritt das Problem auf, wenn sie versuchen, das Objekt aus der ursprünglichen Sammlung zu entfernen, während sie es durchlaufen, da es die ConcurrentModificationException auslöst. In diesem Artikel erfahren Sie, wie die Methode remove() des Iterator und die Methode remove() der Collection unterschiedlich funktionieren.

Einführung in die Methode remove() von Collection

In Java ist Collection eine Schnittstelle, die verschiedene Datentypen wie ArrayList, Set usw. enthält. Um ein Element aus der Collection zu entfernen, können wir die Methode remove() verwenden, indem wir die Sammlung übernehmen Als Referenz.

Benutzer können der folgenden Syntax folgen, um die Methode remove() mit der Sammlung zu verwenden.

collection.remove(Ind);

Ind – Die remove()-Methode entfernt Elemente aus dem Ind-Index der referenzierten Sammlung.

Verwenden Sie die remove()-Methode von Collection

Im folgenden Beispiel haben wir die Sammlung erstellt und das Element aus dem 2. und 4. Index mit der remove()-Methode der Sammlung entfernt.

import java.util.ArrayList;
class Test {
  public static void main(String[] args) {
    // Create an ArrayList
    ArrayList<String> testList = new ArrayList<String>();
    // Add elements in the ArrayList
    testList.add("Apple");
    testList.add("Banana");
    testList.add("Cat");
    testList.add("Dog");
    testList.add("Fox");
    testList.add("Cow");
    // Removing the element at index 2 and 4
    System.out.println(testList.remove(2) + " removed\n");
    System.out.println(testList.remove(4) + " removed");
  }
}

Ausgang:

Cat removed
Cow removed

In der obigen Ausgabe können Benutzer sehen, dass sich alle Elemente in ArrayList um einen Index verschieben, sobald wir die Katze aus dem 2. Index entfernen.

Wenn wir versuchen, das Element aus dem 4. Index zu entfernen, nachdem wir das Element aus dem 2. Index entfernt haben, entfernt die Methode remove() das Element aus dem 5. Index der eigentlichen ArrayList, da alle Elemente nach dem 2. Index nach verschoben wurden links von 1.

Wir haben gelernt, wie die Methode remove() der Collection normal funktioniert.

Einführung in die Methode remove() von Iterator

Nun stellt sich die Frage, was ist der Unterschied zwischen den Methoden remove() von Iterator und Collection, da beide das Element aus der Collection entfernen?

Lassen Sie uns das Problem mit dem folgenden Code verstehen.

import java.util.ArrayList;
class Test {
  public static void main(String[] args) {
    // Create an ArrayList
    ArrayList<String> testList = new ArrayList<String>();
    // Add elements in the ArrayList
    testList.add("Apple");
    testList.add("Banana");
    testList.add("Cat");
    testList.add("Dog");
    testList.add("Fox");
    testList.add("Cow");
    for (String element : testList) {
      if (element.equals("Cat")) {
        testList.remove(element);
      }
    }
  }
}

Im obigen Beispiel haben wir die ArrayList aus verschiedenen Strings erstellt. Wir durchlaufen die ArrayList mit der for-Schleife und prüfen, ob wir versuchen, es mit der collection.remove()-Methode zu entfernen, wenn das Element gleich cat ist.

In der Ausgabe können Benutzer sehen, dass die Ausnahme ConcurrentModificationException ausgelöst wird, wenn wir die ursprüngliche Liste ändern, während wir sie durchlaufen.

Ausgang:

Exception in thread "main" java.util.ConcurrentModificationException

Um unser Problem zu lösen, können wir den Iterator verwenden, um die ArrayList zu durchlaufen, und die remove()-Methode des Iterator, um das Element zu entfernen.

Verwenden Sie die Methode remove() des Iterators

Im Beispiel unten haben wir den Iteratornamen itr für die ArrayList des Strings erstellt. Wir iterieren durch die ArrayList mit der for-Schleife und itr.

Außerdem entfernen wir das Fox-Element aus der ArrayList, während wir es durchlaufen.

import java.util.ArrayList;
import java.util.Iterator;

class Test {
  public static void main(String[] args) {
    // Create an ArrayList
    ArrayList<String> testList = new ArrayList<String>();
    // Add elements in the ArrayList
    testList.add("Apple");
    testList.add("Banana");
    testList.add("Cat");
    testList.add("Dog");
    testList.add("Fox");
    testList.add("Cow");
    // Removing the "Fox" while iterating through the `testList`
    Iterator<String> itr = testList.iterator();
    while (itr.hasNext()) {
      String element = itr.next();
      if (element.equals("Fox")) {
        testList.remove(element);
      }
    }
    System.out.println(testList);
  }
}

Ausgang:

[Apple, Banana, Cat, Dog, Cow]

Wir können beobachten, dass Fox entfernt wird, während die ArrayList in der obigen Ausgabe durchlaufen wird.

Verstehen Sie den Code der Methode remove() von Iterator

Wir haben den folgenden Pseudocode der Methode remove() des Iterators aus den offiziellen Dokumenten von Java entnommen. Benutzer können sehen, dass es auch die remove()-Methode von ArrayList verwendet, aber auch den expectedModCount aktualisiert, der die ConcurrentModificationException-Ausnahme nicht auslöst.

Es ist immer erforderlich, das nächste Element zu kennen, wenn wir durch die ArrayList iterieren. Wenn wir also versuchen, die ursprüngliche Liste mit der Methode remove() zu ändern, wird der nächste Index nicht aktualisiert und der Fehler ausgegeben, und dieses Problem wird in der Methode remove() des Iterators überwunden.

try {
  ArrayList.this.remove(lastRet);
  cursor = lastRet;
  lastRet = -1;
  expectedModCount = modCount;
} catch (IndexOutOfBoundsException ex) {
  throw new ConcurrentModificationException();
}

Außerdem können Benutzer die Liste klonen und die neue Liste durchlaufen. Beim Durchlaufen der neuen Liste können sie das Element aus der ursprünglichen Liste entfernen.

Shubham Vora avatar Shubham Vora avatar

Shubham is a software developer interested in learning and writing about various technologies. He loves to help people by sharing vast knowledge about modern technologies via different platforms such as the DelftStack.com website.

LinkedIn GitHub

Verwandter Artikel - Java Iterator