在for循环错误中访问Array.items []

时间:2014-04-17 16:50:02

标签: java android class for-loop libgdx

为了获得更好的性能,我正在调整代码,查看DDMS跟踪器。一方面是Array.get(x),比Array.items[x]

我们可以直接访问items证明数组类型是Object,或者,我们在构造函数中指定数组类型,如下所示:

Array<MyClass> foo = new Array<MyClass>(MyClass.class)

这很好,但是,如何在for循环中指定最后MyClass.class?我现在有这个:

for (Array<MyClass> listOfObjects : allObjects) {

    for (int i=0; i<listOfObjects.size; i++) {

        MyClass myObj = listOfObjects.get(i);   
        //MyClass myObj = listOfObjects.items[i];  

注释行工作正常,但试图摆脱开销,我想提供如上所述的`(MyClass.class)'。我在哪里可以在for循环构造函数中执行此操作?

非常感谢 Ĵ

2 个答案:

答案 0 :(得分:0)

我认为你要做的事情毫无意义。请阅读这篇精彩的文章:http://blog.codinghorror.com/the-sad-tragedy-of-micro-optimization-theater/

您正在尝试生成一些最小化优化,同时大大降低了可读性和可维护性。

如果你想减少开销,那么看一下像C ++这样的语言可能会更明智,而不是试图破解基本的java for循环。

您可能想要研究的另一件事是Java 8,它增加了与Streams同时执行循环的功能。

答案 1 :(得分:0)

Array<MyClass> foo = new Array<MyClass>(MyClass.class)

请注意,您正在使用此行创建一个NEW数组,并为其传递一个类参数。来自http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/utils/Array.html

Array(java.lang.Class arrayType)
Creates an ordered array with items of the specified type and a capacity of 16.

我没有看到你试图在你发布的其他代码中创建新的数组。您是否尝试填充listOfObjects中的每个allObjects? 如果是这样,你会想做类似的事情:

for (int i = 0; i < allObjects.size; i++)
{
    allObjects.items[i] = new Array<MyClass>(MyClass.class);
}

如果您只是尝试遍历这些数组,则不需要类参数。如果迭代速度太慢,我建议将Array类与其他Gdx或Java集合进行比较。

如果您从阵列中进行大量删除,则上述链接的引用也可能是值得注意的。

A resizable, ordered or unordered array of objects. If unordered, this class avoids a memory copy when removing elements (the last element is moved to the removed element's position).