我有这段代码:
for(int i = 0; i < oldCars.size(); ++i)
{
if(oldCars.get(i).getVelocity().length() > 0.0f)
{
oldCars.get(i).update(timeStep);
}
else
{
oldCars.remove(i);
}
}
它似乎工作正常,但它会在所有条件下工作吗?
由于
答案 0 :(得分:10)
如果要在迭代时删除,请从结尾开始:
for(int i = oldCars.size() - 1; i >= 0; i--)
{
if(oldCars.get(i).getVelocity().length() > 0.0f)
{
oldCars.get(i).update(timeStep);
}
else
{
oldCars.remove(i);
}
}
答案 1 :(得分:3)
我想它不会更新所有条目。
如果删除条目,i
索引会上升,但下一项也会有当前i
值。
oldcar 1
oldcar 2
oldcar 3
删除“oldcar 1”我将为1,您检查的下一个条目是“oldcar 3”而不是“oldcar 2”。
答案 2 :(得分:2)
Iterator<T> it = oldCars.iterator();
while (it.hasNext()) {
T oldCar = it.next();
if (oldCar.getVelocity().length() > 0.0f) {
oldCar.update(timeStep);
} else {
it.remove();
}
}
答案 3 :(得分:1)
您可以使用您的方法,但稍微修改一下。当您从列表中删除项目时,下一个项目将被跳过,因此每次删除项目时都必须递减i
。那么,您将拥有以下内容:
for(int i = 0; i < oldCars.size(); ++i)
{
if(oldCars.get(i).getVelocity().length() > 0.0f)
{
oldCars.get(i).update(timeStep);
}
else
{
oldCars.remove(i--);
}
}