Java:循环列表两次会消耗双倍的功率



LibGDX中出现了一个使用MVC模式的例子。

更新程序看起来像这样

List<Enemies> enemies = new List<Enemies>();
public void update() {
updateEnemies();
checkCollision();
}
void updateEnemies() {
 for each enemy //Loop enemies list{
   enemy.update();
  }
}
void checkCollison(){
   for each enemy//Loop enemies list{
    if(enemy.overlaps(hero.bounds) {
       //Do stuff
    }
   }
}

现在,它会循环浏览灌肠列表两次。我应该这样做吗?也许不是一个小列表,但我想添加很多很多列表,所以我应该合并它们吗?

干杯!

迭代本身很便宜,不太可能是任何性能问题的根源。然而,没有什么是可以保证的;如果要了解程序的性能特征,请使用探查器。

请注意。在更新所有敌人时,他们都会采取新位置。然后检查碰撞。如果你循环:更新一个敌人并检查碰撞,你会检查一些敌人的过时位置。这可能无关紧要,也可能无关紧要。 java 注释将按顺序排列://首先更新所有敌人: ...//现在我们可以为新职位: .

作为答案:开销最小。

从上面的代码中,可以看到性能应该很好,因为您使用的循环对性能友好:

for (Enemies enemy : enemies)
{
    //Do something here
}

据此。

正在执行:

for each element in collection
   operationA();
   operationB();
end for

花费的时间与执行以下操作基本相同:

for each element in collection
   operationA();
end for
for each element in collection
   operationB();
end for

然而,第二种选择可能更清晰,因为每个循环都有一个特定的目标,并不是所有的东西都混在同一个循环中。

理论上,一旦代码被执行,编译器可能会将两个循环合并在一起,或者以更好的方式优化它。有时事情并没有像它们看起来那样完全执行。

合并循环将引入新的开销、意外的间隔...相反,对不同的方法使用相同的循环不会影响实践中的性能,它可以使您的代码保持清晰、更具可读性和可维护性。如果这些方法可以轻松处理使用每种方法捕获异常和其他自定义任务。

最新更新