作者:康话口儿_536 | 来源:互联网 | 2023-01-15 10:54
我正在使用ArrayList
存储CustomObjects
,问题是需要时间才能找到该列表中的对象以便将其删除.(大约100K元素).
我被迫使用,ArrayList
因为我必须按原样保留订单.
我正在考虑更新一个HashMap
以跟踪索引.
问题是当我删除列表中的元素时,我还必须更新地图中的所有索引,这很慢!
我还必须能够通过Index和Object在列表中找到元素.
如果你能引导我找到某种解决方案:)
谢谢.
编辑:我从头开始实现需要LinkedList,它的工作就像一个魅力,感谢大家的帮助:)
1> dasblinkenli..:
我被迫使用,ArrayList
因为我必须按原样保留订单.
幸运的是,您并没有真正被迫使用ArrayList
,因为您有另一个选项:use LinkedHashSet
,它保留了订单,并为您提供了在O(1)中查找和删除项目的选项.
随着这一变化,你将不再能够通过自己的索引来访问项目,你需要确保你插入容器中的项目有适当的实现了hashCode
和equals
.
我也需要用索引找到我的元素
当只有一小部分物品被移除时可用的有点"脏"选项是将null
s 保留在列表中而不是实际删除该项目.这样您就可以HashMap
与您保持同步ArrayList
,但null
每次从阵列列表中访问项目时都会进行额外的检查.请注意,如果使用此方法,则列表的长度不再表示集合中的项目数.相反,您需要使用哈希映射中的项目数.
@Glidro对,`LinkedList`无济于事,到处都会慢得多.