# Bestimmte Elemente einer ArrayList löschen



## System.exit(0) (29. Dez 2009)

Hallo,

ich habe ArraLists, die immer nur Objekte einer Klasse enthalten.

Ist der folgende Code zum Löschen bestimmter Elemente effizient oder geht das auch einfacher?

Gruß

System.exit(0)


```
public static ArrayList <mySprite> delete_mySprites(ArrayList <mySprite> List)
    {
        // Länge der Liste bestimmen
        ArrayList <Integer> indices = new ArrayList <Integer>();
        
        // Nach Löschbedingung suchen, aber von hinten
        for (int i = List.size(); i > 0 ; --i)
        {
            if (List.get(i).getLebensPunkte() <= 0)
            {
                indices.add(i);
            }
        }
        
        // Elemente von hinten nach vorne löschen
        // somit bleiben die Indices konstant
        for (int i = 0; i < indices.size(); i++)
        {
            List.remove((int)indices.get(i));
        }
        return List;
    }
}
```


----------



## Der Müde Joe (29. Dez 2009)

über einen Iterator:
ca

```
Iterator<Sprite> it = list.iterator();
while(it.hasNext){
Sprite s = it.next();
if( /* dead */) { it.remove();}
```

muss mal in die API gucken aber stimmt in etwa

EDIT:
da fehlt noch ein () nach hasNext, aber sonst passts


----------



## eRaaaa (29. Dez 2009)

z.B. über dne Listiterator, dann kannst du auch direkt löschen


```
for (ListIterator<mySprite> iterator = List.listIterator(); iterator.hasNext();) {
	    if (iterator.next().getLebensPunkte() <= 0) {
		iterator.remove();
	    }
	}
```


----------



## Der Müde Joe (29. Dez 2009)

PS. Klassen sollte man gross schreiben (und NIE my nennen)

zb MySprite (besse EnemySprite oder so)

und variablen immer klein (und schlau bennen).
Also nicht list sondern sprites oder so


----------

