java - ArrayList快速查找自定义对象

标签 java performance arraylist hashmap

我正在使用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/

相关文章:

java - 在 listFragment 中实现 OnScrollListener

javascript - 在 .js 文件和性能中使用 php

java - 使用对象字段从 ArrayList<Object> 创建 Object[][] 的简单方法

html - CSS-:hover is slow/laggy in IE7

java - 显示多个字符串项目Java

java - 使用 Get 方法仅提取数组列表中索引的某些部分

java - 如何将变量传递给tile(tiles库)

java - Tomcat-Maven 401错误

java - Android 应用程序允许用户下载在线内容

php - 是否有满足这些特定标准的 PHP 基准测试?