Ich habe die Dokumentation von% co_de durchgesehen ( Ссылка ) %
dort wurde Iterator.remove()
) als
Entfernt das letzte zurückgegebene Element aus der zugrunde liegenden Sammlung durch den Iterator (optionale Operation). Diese Methode kann nur einmal aufgerufen werden per Anruf zum nächsten. Das Verhalten eines Iterator ist nicht spezifiziert, wenn der Die zugrunde liegende Sammlung wird geändert während die Iteration läuft in auf irgendeine andere Weise als durch das Anrufen Methode.
Verhalten eines Iterators ist nicht angegeben, wenn die zugrunde liegende Sammlung geändert wird
# 1: Optional bedeutet, dass Sie es implementieren können oder werfen Sie ein UnsupportedOperationException
# 2: Diese Operation ist optional, weil Sie manchmal nicht möchten, dass der Inhalt Ihres Iterators geändert wird. Oder was verstehst du unter "Robustheit der Bedienung"?
BEARBEITEN # 4: behavior of an iterator is unspecified if the underlying collection is modified
Normalerweise verwenden Sie einen Iterator, indem Sie
ausführen %Vor%Wenn Sie jetzt ein Element entfernen möchten, während Sie durch die Liste iterieren, rufen Sie
auf %Vor%Das ist nicht sauber , möglicherweise korrumpiert Daten in Ihrer Liste / Sammlung / ... und sollte vermieden sein. Stattdessen entferne () das Element durch den Iterator :
%Vor% Zunächst ist java.util.Iterator
eine Schnittstelle, d. h. eine Vereinbarung, wie Klassen, die diese Schnittstelle implementieren, mit dem Rest der Welt interagieren. Es liegt in ihrer Verantwortung, wie sie die Interaface-Methoden implementieren.
Wenn die zugrunde liegende Datenstruktur das Entfernen nicht erlaubt, wird remove()
eine UnsupportedOperationException
werfen. Wenn Sie beispielsweise eine Ergebnismenge durchlaufen, die von einer DB abgerufen wurde, ist es sinnvoll, diese Methode nicht zu implementieren.
Wenn Sie über eine Sammlung iterieren, die zwischen gleichzeitigen Threads geteilt wird, und der andere Thread den Daten-Iterations-Thread ändert, werden unbestimmte Ergebnisse zurückgegeben.
Es wird als optional beschrieben, da nicht alle Auflistungsklassen, die Ihnen einen Iterator geben können, die Methode remove()
im Iterator implementieren, den sie zurückgeben. Wenn der zurückgegebene Iterator es nicht implementiert, wird ein UnsupportedOperationException
ausgelöst.
Die normalen java.util.ArrayList
, java.util.LinkedList
und andere Standard-Auflistungsklassen implementieren die remove()
-Methode in ihren Iteratoren, sodass Sie sie sicher verwenden können.