ArrayList快速查找自定义对象

Gli*_*dro 2 java performance arraylist hashmap

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

我被迫使用,ArrayList因为我必须按原样保留订单.

我正在考虑更新一个HashMap<Object, Integer>以跟踪索引.

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

我还必须能够通过Index和Object在列表中找到元素.

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

编辑:我从头开始实现需要LinkedList,它的工作就像一个魅力,感谢大家的帮助:)

das*_*ght 5

我被迫使用,ArrayList因为我必须按原样保留订单.

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

随着这一变化,你将不再能够通过自己的索引来访问项目,你需要确保你插入容器中的项目有适当的实现了hashCodeequals.

我也需要用索引找到我的元素

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

  • @Glidro对,`LinkedList`无济于事,到处都会慢得多. (2认同)