clear() ist auch was ganz anderes !
Hier ist mal der Code von removeAll()
[code]
public boolean removeAll(Collection<?> c) {
boolean modified = false;
Iterator<?> e = iterator();
while (e.hasNext()) {
if (c.contains(e.next())) {
e.remove();
modified = true;
}
}
return modified;
}
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
[/code]
Es ist einfach nur um den Faktor 3-4 langsamer, und synchronisiert ist da auch nichts, von daher ist es auch nicht "sicherer".
Eine Schleife in einem Spiel, die pro Sekunde mehrmals durchlaufen wird, muss effizient sein.
Warum soll man sie also mit unnötigen Operationen aufblähen, um am Ende zum gleichen Ergebnis zu kommen?
Wenn überhaupt reicht ein synchronized(missileList) um den ganzen Loop und gut ist.
1synchronized(missile_list) {
2
3for(int i = 0; i < missile_list.size(); i++) {
4 Missile m = (Missile) missile_list.get(i);
5 c.drawBitmap(m.getBitmap(), m.getX(), m.getY(), null);
6 m.move();
7 if(m.getY() <= -10) missile_list.remove(i);
8}
9
10}
— geändert am 08.02.2011, 16:21:37
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.