为了获得更好的性能,我正在调整代码,查看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循环构造函数中执行此操作?
非常感谢 Ĵ
答案 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).