我正在使用ArrayList
存储CustomObjects
,问题是需要花费时间在该列表中找到一个对象才能将其删除。 (大约 100K 元素)。
我被迫使用ArrayList
因为我必须保持订单不变。
我正在考虑更新 HashMap<Object, Integer>
跟踪索引。
问题是当我删除列表中的元素时,我还必须更新 map 中的所有索引,这很慢!
我还必须能够通过索引和对象查找列表中的元素。
如果你能引导我找到某种解决方案:)
谢谢。
编辑:我从头开始实现了所需的 LinkedList,它的工作就像一个魅力,感谢大家的帮助:)
最佳答案
I'm forced to use
ArrayList
as I have to keep the order as is.
幸运的是,您并不是真的被迫使用 ArrayList
,因为您还有另一个选择:使用 LinkedHashSet
,它保留顺序,并为您提供在 O(1) 中查找和删除项目的选项。
通过此更改,您将无法再通过索引访问项目,并且您需要确保插入到容器中的项目具有 hashCode
and equals
的正确实现。 .
I need to find my elements with indexes too
当只有一小部分项目被删除时,一个有点“脏”的选项是保留null
。列表中的 s 而不是实际删除该项目。这样你就可以保留HashMap<Object,Integer>
与您的ArrayList
同步,以增加 null
为代价每次访问数组列表中的项目时都会进行检查。请注意,如果您使用此方法,列表的长度不再表示集合中的项目数。相反,您需要使用 HashMap 中的项目数。
关于java - ArrayList快速查找自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46606402/