1

假设我们有一个对象数组列表ObjArray

该对象在列表中定位自己并将自己从列表中删除的最有效方法是什么?

我倾向于使用的方式是这样的:

  • 列表中的每个对象都有一个与其在列表中的位置相对应的 ID
  • object.remove()被调用时,对象只是简单地调用ObjArray.remove(ID).
  • ObjArray从索引 ID 向上解析,调用ObjArray.get(i).ID--. 这会将已移除对象上方的所有对象设置为正确的 ID。

另一种方法当然是简单地解析ObjArray,直到找到对象匹配。

那么,有没有更好的方法来做到这一点?ArrayList不是必须的,如果a HashMaporLinkedList可以用来做更好的事情,那也一样好。


根据要求提供更多信息。

对象包含有关它们需要在屏幕上绘制的位置以及要绘制的图像的信息。主 JPanel的paint功能由计时器调用。该paint函数循环遍历列表ObjArray并调用对象的绘制函数 ( Obj.draw(Graphics g))。

通过单击可以添加或删除对象。

当一个对象被删除时,它需要将自己从ObjArray列表中删除。我已经在第一部分中说明了我能想到的两种方法。

我想知道是否有人知道更有效的方法。

简而言之:一个项目在列表中查找/了解其位置的最有效方法是什么

4

2 回答 2

2

在代码方面高效:

list.remove(this); 

当然,必须为该对象提供对列表的引用。


性能方面的高效需要进行小的重新设计,可能涉及地图,但这超出了这个问题的范围。

于 2013-06-16T06:12:12.277 回答
0

使用列表的 indexOf 获取 ID。放弃您对每个对象的 ID 的想法。_

于 2013-06-16T05:49:59.943 回答