【发布时间】:2015-02-10 09:55:14
【问题描述】:
libGDX Array 类的 javadoc 说:一个可调整大小、有序或无序的对象数组。如果无序,则此类在删除元素时避免内存复制(最后一个元素移动到被删除元素的位置)。
元素去除改进是这个类的唯一优点还是还有其他优点?
换句话说 - 如果我根本不打算从列表中删除元素,我可以使用 ArrayList 吗?
【问题讨论】:
标签: libgdx
libGDX Array 类的 javadoc 说:一个可调整大小、有序或无序的对象数组。如果无序,则此类在删除元素时避免内存复制(最后一个元素移动到被删除元素的位置)。
元素去除改进是这个类的唯一优点还是还有其他优点?
换句话说 - 如果我根本不打算从列表中删除元素,我可以使用 ArrayList 吗?
【问题讨论】:
标签: libgdx
Array 实际上并不是标准 Java 集合类的唯一“替代品”。还有更多类似ObjectSet 或IntIntMap。你可以找到他们所有的here。
它们大多经过优化以尽可能避免垃圾收集。他们以多种方式做到这一点。
您已经指出了一种方法,即尽可能避免内存复制,例如在删除 Array 中的元素的情况下。
此外,他们重用了迭代器。标准的 java 集合不这样做,这就是为什么每次迭代集合时都会创建一个新的Iterator。
另一种方式是使用原语,它避免了由于自动装箱而创建的对象。 IntIntMap 例如有 int 键和 int 值。标准 java HashMap<Integer, Integer> 无法处理原语,这将导致许多自动装箱的 int -> Integer。
您应该始终尽量坚持使用 libgdx 类,尤其是在移动设备上。在桌面上,垃圾收集器通常非常快,以至于您不会注意到它,但即使在那里它也会导致丑陋的 FPS 延迟。
【讨论】: