【发布时间】:2011-07-07 14:09:29
【问题描述】:
所以,我正在编写一个基于 LWJGL 的 2D Java 游戏引擎。 (它将是开源的,但是当它更加完善时。:P)我已经走了很远,但是当我尝试进行另一次完善时,我决定我需要一些关于数据结构的外部意见我正在使用。
该结构称为UpdateList。基本上,我想要一个完全动态的对象列表来表示游戏中的所有对象,但能够以数组的速度迭代它,因为可以引用数百个对象。
为此,该类有 3 个数据成员:一个 ArrayList,一个相同类型的数组,以及一个布尔值标记列表是否已更改(标题为 改变了)。
这个类的工作相当简单——正如你想象的那样,从 ArrayList 中添加和删除对象,这样做会将 changed 设置为 true。
然后,有两种方法涉及访问数组 - updateList(T[]) 和 getUpdateList()。
updateList 将数组传递给 ArrayList 的 toArray(generic[]) 方法;数组设置为这个新值(如果更改为真 - 如果列表没有更改,则没有任何反应)。
getUpdateList 返回数组。
因此,为了使用,无论何时开发人员想要更新数组,都会调用 updateList,并使用 getUpdateList 进行迭代。这不仅比仅使用 ArrayList 快一点,而且还避免了 ConcurrentModificationErrors,并且 UpdateList 可以在迭代期间通过自身进行编辑。
那么,两个问题:
1:) 这是实现我需要的数据结构类型的好方法吗?在使用/API方面,非常简单,但我关心的是ArrayList的toArray方法。如果条目数量较多,这需要多长时间?如果它很笨拙,我可以使用更好的动态类吗?
2:) 其次,我不喜欢调用 updateLists(T[0])。有没有一种好方法可以将 ArrayList 的副本管理到一个数组中而不需要这个?
【问题讨论】:
标签: java generics data-structures performance iteration