2012-03-12 2 views
0

Могу ли я вызвать функцию в ArrayList без использования цикла for или есть способ сделать это на anthoer. Надеюсь, что мой пример будет иметь больше смысла.android ArrayList and draw for for loop

public class Fireball { 

     public void draw(GL10 gl){ 
     draw(gl); 
     } 

public class Gameview { 

    private ArrayList<FireBall> fireBall = new ArrayList<FireBall>(); 

    public draw(GL10 gl){ 
    //this is where I what to draw everthing in the ArrayList 
     fireBall.getIndex(ALL).draw(gl) 
    } 
} 

причина Я спрашиваю потому, что я, что, чтобы иметь возможность добавлять и удалять огненный шар без необходимости беспокоиться о скорости компьютера спасибо

ответ

1

Итерации через ArrayList не то, что процессор затрат (хотя используя векторы, которые вы могли бы оптимизировать еще больше), и даже если бы у вас был способ рисования нескольких файерболов сразу, этот метод все равно будет проходить через ArrayList так же, как и вы.

+1

Почему бы вектор быть быстрее, чем ArrayList? Во всяком случае, не наоборот? (Потому что у Vector есть накладные расходы синхронизации)? – Thilo

+1

ах жаль, по вектору я имел в виду Fireball []. Изменить: я только теперь понял, что то, что мой профессор назвал «вектором», все остальные называют «массивом» ... – zrgiu

0

Поскольку вы используете arraylist, вы можете использовать цикл while.
проверка Просто это содержимое списка не является нулевым

ArrayList al = new ArrayList(); 
al.add("a"); 
al.add("b"); 
al.add("c"); 
al.add("d"); 
al.add("e"); 

int counter = 1; 
while (!al.isEmpty()) { 
    System.out.println(counter++ + ": " + al.toString()); 
    al.remove(0); 
} 

Выход:

1: [а, б, в, д, е]
2: [б, , д, е]
3: [с, d, е]
4: [д, е]
5: [е]

Преимущество в том, что она использует меньше памяти, так как ваше удаление неиспользуемых элементов, но если вы хотите повторно использовать ArrayList, вы должны просто петлю через элементы:

fireball.getIndex(ALL); 
while (Fireball f : fireball) { 
    f.draw(gl) 
}