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

在java中搜索集合的最快方法,java,android,performance,sorting,search,Java,Android,Performance,Sorting,Search,我做了一个项目,我真的很难继续下去。没有注释、未记录的代码、不一致的命名变量等 但是,在某个时候,我终止了搜索的缓慢执行。老实说,我从来没有因为没有太多的数据需要处理而在我开发的移动应用程序上出现过迟钝的情况 好的,有一个a类,包含以下字段: ID整数 信息1字符串 信息2字符串 。。。串 在会话期间,类A的集合将填充新实例。在某些情况下,用户会在选择实例ID时询问实例信息(集合不会按ID以任何顺序排序)。平均来说,在一些较旧的设备上大约有2500个实例,需要很长时间才能找到尽可能快地执行此

我做了一个项目,我真的很难继续下去。没有注释、未记录的代码、不一致的命名变量等

但是,在某个时候,我终止了搜索的缓慢执行。老实说,我从来没有因为没有太多的数据需要处理而在我开发的移动应用程序上出现过迟钝的情况

好的,有一个a类,包含以下字段:

  • ID整数
  • 信息1字符串
  • 信息2字符串
  • 。。。串
在会话期间,类A的集合将填充新实例。在某些情况下,用户会在选择实例ID时询问实例信息(集合不会按ID以任何顺序排序)。平均来说,在一些较旧的设备上大约有2500个实例,需要很长时间才能找到尽可能快地执行此操作的最佳做法是什么?(带时间复杂性说明)

给我留下代码的精灵把所有的代码都放在一个集合中,并通过线性搜索进行搜索

  • Heapsort,那么可以通过二进制搜索进行多次搜索吗
  • 按排序顺序添加,然后使用二进制搜索
  • 将数据放入SQLite临时表(获取更多数据的意义)并按查询进行搜索
  • 哈希集或树集
  • 还有别的

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


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

    如果你按密钥搜索一个集合,你通常应该使用一个哈希图,它在预期的O(1)时间内根据键找到图中的项。
    但是,如果标识符是数字且连续的(即,它们从0到2500,没有间隙),则可以使用ArrayList,在该列表中,您可以在
    O(1)
    时间内通过其索引访问项目。如果标识符是数字且连续的,并且绑定了项数,则根本不需要集合。数组就可以了。

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

    答案的第一部分适合我的情况。如果我使用微调器和“name”字符串,而不是在微调器中显示ID,会怎么样?您能推荐解决方案吗?@StevanPopov一个选项是有两个hashmap,一个以ID为键,另一个以
    name
    为键。另一个选项是只有一个ID为键的贴图,在微调器中,您可以区分显示的值(名称)和实际值(ID)-我假设存在这种区别(我不熟悉微调器类)。当一个项目被选中时,你可以通过它的ID在HashMap中搜索它。你的意思是?我们会假设自定义适配器可以高效地搜索对象吗?@Stevanpov您肯定不会在微调器中显示超过几十个项目,是吗?对于这么少的项目,线性搜索已经足够好了。@maaartinus我宁愿使用两个哈希映射,而不是让我的代码线性搜索。关于在微调器中获取选定字符串(对象)的其他值,您是否有参考资料?你知道它会搜索线性吗?