Wir alle wissen, dass die sicherste "und wahrscheinlich nur sichere" Weg ein Objekt aus einer Sammlung zu entfernen, während es iteriert, indem Sie zuerst die Iterator
abrufen, führen Sie eine Schleife und entfernen Sie bei Bedarf;Wie Iterator entfernen Methode tatsächlich entfernen ein Objekt
Iterator iter=Collection.iterator();
while(iter.hasNext()){
Object o=iter.next()
if(o.equals(what i'm looking for)){
iter.remove();
}
}
Was ich verstehen möchte, und leider keine tiefe technische Erklärung, gefunden haben, ist, wie diese Entfernung durchgeführt wird,
If:
for(Object o:myCollection().getObjects()){
if(o.equals(what i'm looking for)){
myCollection.remove(o);
}
}
Wird ein ConcurrentModificationException
werfen, was macht "in technischer Hinsicht" Iterator.remove()
? Entfernt es das Objekt, unterbricht die Schleife und startet die Schleife neu?
Ich sehe in der offiziellen Dokumentation:
„das aktuelle Element Entfernt Werfe
IllegalStateException
wenn ein versucht wird,remove()
zu nennen, die nicht durch einen Aufruf next() vorangestellt ist..“
Der Teil „entfernt das aktuelle Element“, lässt mich an der exakt gleichen Situation denken, in einer „normalen“ Schleife geschieht => (Gleichheitstest durchzuführen und entfernen, wenn nötig), aber warum ist die Iterator Schleife ConcurrentModification- sicher?
Sie selbst sehen können: https://gist.github.com/kibotu/e480bd7505615a7311a6 –