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