使用arraylist迭代游戏中的一组项目是一个“好主意”吗?
例如,如果我有5个“敌人对象”,那么使用它是明智的:
for (int e = 0; e < maxenemy; e++)
{
Enemy[e].Update();
}
或者我可以使用它与可比较的结果吗?
for(Enemy e : enemies)
{
Enemy.get(e).Update();
}
我正在尝试决定使用ArrayList是否可行,而不是使用“敌对象”的静态数组
答案 0 :(得分:0)
Array和ArrayList之间的主要区别在于Array是固定大小的,而ArrayList不是并且可以不断增长。因此,如果你知道总会有5个敌人对象然后坚持使用数组,但是如果敌人对象的数量增加,那么使用ArrayList
编辑:
您的ArrayList示例有误。它应该是:
for(Enemy e : enemies)
{
e.Update();
}
当你像这样迭代一个ArrayList时,e成为敌人列表中的一个真实的Enemy对象。所以你可以在电子邮件上调用敌人的方法。
答案 1 :(得分:0)
如果你有固定数量的敌人并且你总是只是遍历它们,那么阵列会更快一点。但是,如果您需要修改列表或执行更复杂的查询,ArrayList
会更加灵活。
答案 2 :(得分:0)
嗯,如果你的游戏在其生命周期内获得或失去敌人,阵列列表可能会更好。静态数组将被修复并且不是非常灵活。我还注意到你的第二个代码片段可能更好地写成
for(Enemy e : enemies)
{
e.Update();
}
语法更简单,也许效率更高一些。 :d
答案 3 :(得分:0)
#2方式适用于所有设备,而#1仅适用于具有JIT的设备。
查看使用增强型For循环语法部分here
答案 4 :(得分:0)
出于多种原因,您应该使用ArrayList而不是裸数组:
虽然裸阵列解决方案会稍快一些,但几乎在所有情况下,差异都可以忽略不计。几乎可以肯定,性能瓶颈将出现在其他地方。
使用ArrayLists可以让您以后灵活地使用其他类型的List或Iterable。例如,您可能稍后意识到您需要能够动态添加和删除敌人,但您永远不需要索引到列表的中间 - 在这种情况下,链接列表会更好。
比较两种解决方案的代码:
int m = enemies.length; for (int i = 0; i < m; i++) enemies[i].update();
和
for (Enemy e : enemies) e.update();
阵列版本更长,因此更容易出现错误。因此,提高代码质量最好使用ArrayList。