Nehmen wir an, wir haben eine ArrayList von Katzen.Kann ich eine reguläre for-Schleife verwenden, um bestimmte Objekte aus einer ArrayList zu löschen?
Dies ist unsere Katze:
public class Cat{
String color;
int age;
public Cat(String color, int age){
this.color = color;
this.age = age;
}
}
Wir haben eine Katze und jede Katze eine Farbe hat. An anderer Stelle in unserem Code haben wir folgendes:
ArrayList<Cat>cats = new ArrayList<Cat>();
cats.add(new Cat("white",5);
cats.add(new Cat("black",6);
cats.add(new Cat("orange",10);
cats.add(new Cat("gray",3);
System.out.println(cats.size()); prints out 4
So jetzt sind Katzen ArrayList hat 4 Katzen drin. Was, wenn ich alle Katzen entfernen möchte, die über 5 Jahre alt sind, sollte ich nicht in der Lage sein, folgendes zu tun?
for(int index = 0; index<cats.size(); index++){
if(cats.get(index).age > 5){
cats.remove(index);
}
}
Jetzt danach läuft, drucke ich Arraylist die Größe der Katzen aus und es sagt, 3, obwohl es 3 Katzen und ein verlassen entfernen sollte.
Also, sollte das nicht funktionieren? Ich verstehe nicht, warum es nicht ging. Welche anderen Möglichkeiten gibt es, um Objekte mit bestimmten Werten aus einer Liste/einem Array zu entfernen?
Siehe den obigen Link. tl; dr: Benutze einen Iterator. –
@TimBiegeleisen Was hat das mit einer CoMod-Ausnahme zu tun? – shmosel
Nein, du kannst es nicht so machen. Denken Sie darüber nach: Wenn Sie die Elemente iterieren und eines in der Mitte der Schleife löschen, ändert sich der Index der nächsten Elemente und überspringt daher jedes Mal ein Element. Was es tut ist: der erste wird übersprungen, weil das Alter 5 ist. Der zweite wird gelöscht, der Index ist 1, Größe() ist 3 nach dem Löschen. Also im nächsten Schritt ist Index 2, aber das ist jetzt "grau" und nicht orange. Grau ist 3, also nicht gelöscht. Danach ist index = 3 und size() = 3, so dass die Schleife beendet wird und Sie 3 Elemente haben: weiß, orange und grau. –