ArrayList快速查找自定义对象

时间:2017-10-06 13:03:47

标签: java performance arraylist hashmap

我使用ArrayList存储CustomObjects,问题是需要时间才能找到该列表中的对象才能将其删除。 (大约100K元素)。

我被迫使用ArrayList,因为我必须按顺序保留订单。

我在考虑更新HashMap<Object, Integer>以跟踪索引。

问题是当我删除列表中的元素时,我还必须更新地图中的所有索引,这很慢!

我还必须能够通过索引和对象在列表中找到元素。

如果你能引导我找到某种解决方案:) 感谢。

编辑:我从头开始实现了必需的LinkedList,它的工作就像一个魅力,谢谢你的帮助每个人:) ...

1 个答案:

答案 0 :(得分:5)

  

我被迫使用ArrayList,因为我必须按顺序保留订单。

幸运的是,您并没有真正被迫使用ArrayList,因为您还有另一种选择:使用LinkedHashSet保留订单,并为您提供查找和删除O(1)中的项目的选项

通过此更改,您将无法再按索引访问项目,并且您需要确保插入容器的项目具有hashCode and equals的正确实现。

  

我需要找到带索引的元素

有点&#34;更脏&#34;当只删除一小部分项目时可用的选项是将null保留在列表中而不是实际删除项目。这样,您可以使HashMap<Object,Integer>ArrayList保持同步,但每次从阵列列表中访问项目时都会进行额外的null检查。请注意,如果使用此方法,则列表的长度不再表示集合中的项目数。相反,您需要使用哈希映射中的项目数。