在java中搜索集合的最快方法

时间:2014-08-10 15:31:03

标签: java android performance sorting search

我参加了一个项目,我很难继续。没有注释,没有文档的代码,不一致的命名变量等。

但是,在某些时候我的搜索执行速度很慢。老实说,我之前从未在我开发的移动应用程序上过期缓慢,因为没有太多数据需要处理。

好的,有一个 A类,其中包含以下字段:

  • ID整数
  • 信息1字符串
  • 信息2字符串
  • ... string

在会话期间,A类的集合正在填充新实例。在某些时候,用户要求选择实例ID的实例信息(集合不按任何顺序按ID排序)。平均而言,大约有2500个实例在某些旧设备上需要很长时间才能找到它。 尽可能快地执行此操作的最佳做​​法是什么? (时间复杂度解释)

将我的代码留给我的精灵将它全部放在一个集合中并通过线性搜索进行搜索。

  1. Heapsort,可以通过二分搜索多次搜索吗?
  2. 按排序顺序添加,然后使用二进制搜索?
  3. 将数据放入SQLite临时表(了解更多数据)并按查询搜索
  4. HashSet或TreeSet
  5. 别的......

3 个答案:

答案 0 :(得分:3)

如果您按键搜索集合,通常应该使用HashMap,它会根据预期O(1)时间内的键来查找地图中的项目。

但是,如果标识符是数字且连续的(即它们从0到2500没有间隙),则可以使用ArrayList,您可以在O(1)时间内通过索引访问项目。如果标识符是数字和连续的,并且除了绑定的项目数之外,您根本不需要收集。数组就可以了。

答案 1 :(得分:0)

我想说这取决于你需要对这个系列做什么样的操作。如果您只是按ID搜索元素,那么HashMap可能是一个很好的解决方案(所有基本操作的时间复杂度)。如果需要对元素进行排序,您可能更喜欢TreeSet(O(log(n))复杂度,用于基本操作,如添加,查找,删除等,但是有序的数据结构。)

如果您需要搜索其他标准,可以考虑使用数据库。

答案 2 :(得分:0)

集合中的ArrayList和Vector实现随机访问接口,这是搜索操作的最佳解决方案。如果您使用ID作为键

,则可以使用HashMap