java - 对象从列表中删除自身的最有效方法

标签 java list

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

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

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

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

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

那么,有没有更好的方法呢? ArrayList 不是必需的,如果可以使用 HashMapLinkedList 来做得更好,那就更好了。

<小时/>

根据要求提供更多信息。

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

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

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

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

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

最佳答案

代码效率高:

list.remove(this); 

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

<小时/>

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

关于java - 对象从列表中删除自身的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17130454/

相关文章:

list - Haskell — 从无限列表中获取多个值,而无需重新开始列表

python - 从 Python 的子列表中获取所有非 None 项目的索引?

python - 尝试使用两个不同范围的变量来理解 Python 列表

使用列表理解将元组列表转换为列表

java - 浏览器不缓存资源( header 设置)

java.util.List<T> t 代表什么?

java - 如何从代码创建类图?

html - 水平显示列表不适用于内联显示

Java反射: set super class field during initialization

java - 无法访问未找到 java.awt.image.RenderedImage 的 RenderedImage 类文件