Java阵列列表效率
我正在编写一个游戏,有一个名为GameObject的抽象类和三个扩展类(玩家、墙和敌人) 我有一个定义为so的列表,其中包含游戏中的所有对象Java阵列列表效率,java,performance,arraylist,Java,Performance,Arraylist,我正在编写一个游戏,有一个名为GameObject的抽象类和三个扩展类(玩家、墙和敌人) 我有一个定义为so的列表,其中包含游戏中的所有对象 List<GameObject> objects; 如你所见,我必须浏览整个列表并检查类型,以查找单个对象。在我看来,这似乎不是很有效。因此,我考虑将不同的派生类存储在它们自己的列表中 private List<Wall> walls; private List<Enemy> enemies; private Play
List<GameObject> objects;
如你所见,我必须浏览整个列表并检查类型,以查找单个对象。在我看来,这似乎不是很有效。因此,我考虑将不同的派生类存储在它们自己的列表中
private List<Wall> walls;
private List<Enemy> enemies;
private Player player; // only one
私有列表墙;
私人名单敌人;
私人玩家;//只有一个
这会比浏览包含所有内容的整个列表并检查其类型来决定是否做某事更有效吗?非常感谢 通常的方法是在GameObject上使用接口
public interface GameObject {
void update();
}
public class Player implements GameObject {
public void update() { // update player...
}
public class Wall implements GameObject {
public void update() { // probably do nothing...
}
public class Enemy implements GameObject {
public void update() { // update enemy...
}
然后让每个对象实现GameObject
public interface GameObject {
void update();
}
public class Player implements GameObject {
public void update() { // update player...
}
public class Wall implements GameObject {
public void update() { // probably do nothing...
}
public class Enemy implements GameObject {
public void update() { // update enemy...
}
然后您的更新循环如下所示
public void update() {
for(GameObject o : objects) {
o.update();
}
}
我不能向你保证这会更快,但可能会更快。编译器可能能够像这样优化虚拟调用(虚拟调用在面向对象编程中很常见,因此编译器知道如何优化是一件非常好的事情),然而,我认为它几乎不能优化实例类类型的显式检查。一个列表或多个列表并不重要。你应该考虑的是给每一个对象分配一个标识符,并将其存储在<代码> map < /Cord>实现中以便于检索。并让实例决定这是什么。或者可能是
update()
?