iteration blues
So, I wrote this code for some particle effects:
package com.coolfone.particles;
import java.util.Iterator;
import java.util.Vector;
import javax.microedition.khronos.opengles.GL10;
public class FireManager {
static Vector<Particle> particles = new Vector<Particle>();
public static void startfire(float x, float y) {
for (int ctr = 0; ctr < 100; ctr++) {
Particle p = new Particle();
p.x = (float) (x + Math.random()-.5);
p.y = (float) (y + Math.random()-.5);
p.dx = (float) (Math.random()-.5)/4f;
p.dy = (float) (Math.random()-.5)/4f;
p.timeleft = (int) (Math.random() * 50 + 50);
particles.add(p);
}
}
public static void burnfire() {
Iterator<Particle> i = particles.iterator();
Vector<Particle> removelist = new Vector<Particle>();
while (i.hasNext()) {
Particle p = i.next();
p.move();
p.timeleft--;
if (p.timeleft == 0) removelist.add(p);
}
particles.removeAll(removelist);
}
public static void drawfire(GL10 gl) {
Iterator<Particle> i = particles.iterator();
while (i.hasNext()) {
Particle p = i.next();
p.draw(gl);
}
}
}
I'm concerned about inefficiency in the burnfire function. Does
anyone know how to rewrite this quickly if particles was a linked
list? The main issue is that I'm not sure if removing items during
iteration messes up the iterator.