我使用ArrayList
存储CustomObjects
,问题是需要时间才能找到该列表中的对象才能将其删除。 (大约100K元素)。
我被迫使用ArrayList
,因为我必须按顺序保留订单。
我在考虑更新HashMap<Object, Integer>
以跟踪索引。
问题是当我删除列表中的元素时,我还必须更新地图中的所有索引,这很慢!
我还必须能够通过索引和对象在列表中找到元素。
如果你能引导我找到某种解决方案:) 感谢。
编辑:我从头开始实现了必需的LinkedList,它的工作就像一个魅力,谢谢你的帮助每个人:) ...答案 0 :(得分:5)
我被迫使用
ArrayList
,因为我必须按顺序保留订单。
幸运的是,您并没有真正被迫使用ArrayList
,因为您还有另一种选择:使用LinkedHashSet
保留订单,并为您提供查找和删除O(1)中的项目的选项
通过此更改,您将无法再按索引访问项目,并且您需要确保插入容器的项目具有hashCode
and equals
的正确实现。
我需要找到带索引的元素
有点&#34;更脏&#34;当只删除一小部分项目时可用的选项是将null
保留在列表中而不是实际删除项目。这样,您可以使HashMap<Object,Integer>
与ArrayList
保持同步,但每次从阵列列表中访问项目时都会进行额外的null
检查。请注意,如果使用此方法,则列表的长度不再表示集合中的项目数。相反,您需要使用哈希映射中的项目数。