Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用string.contains在java中最好地搜索字符串列表?_Java_Android_String_Search - Fatal编程技术网

如何使用string.contains在java中最好地搜索字符串列表?

如何使用string.contains在java中最好地搜索字符串列表?,java,android,string,search,Java,Android,String,Search,现在我正在使用voice recog开发一个android应用程序。基本上,我想知道当我从语音识别中获得字符串时,最好的搜索方法是什么。我目前正在对packagename列表进行线性搜索,使用以下方法获取该列表: pkgNames = new ArrayList<String>(); pkgAppsList = (ArrayList<ApplicationInfo>) getPackageManager() .getInstalle

现在我正在使用voice recog开发一个android应用程序。基本上,我想知道当我从语音识别中获得字符串时,最好的搜索方法是什么。我目前正在对packagename列表进行线性搜索,使用以下方法获取该列表:

    pkgNames = new ArrayList<String>();
    pkgAppsList = (ArrayList<ApplicationInfo>) getPackageManager()
            .getInstalledApplications(PackageManager.GET_META_DATA);

    // List available packages on phone.
    for (ApplicationInfo appInfo : pkgAppsList) {

        if (!isSystemPackage(appInfo))
            pkgNames.add(appInfo.packageName);
    }

有没有一种更快的搜索方法可以与contains方法一起使用,或者没有contains方法也可以使用?

对于少量搜索字符串(应用程序名称),应该选择最简单的方法(遍历链接列表)

自动增长的哈希表通常用于类似的任务,但仅当搜索的字符串集通常较大时。哈希表在最坏情况下的性能与遍历链表相同(由于自动增长,并且由于可能存在大量哈希值冲突),并且其开销不可忽略。因此,对于针对较长串的“以防万一”保险而言,这并不是一个很好的选择


理论上适合此任务的数据结构称为。尝试不是JCL或Android库的一部分,而是可用的实现。trie在最坏情况下的性能与最长字符串的长度成正比,而与字符串的数量无关。然而,尝试往往会占用大量内存,这使得它们适用于移动环境

我认为,除非你已经安装了数万个应用程序,否则这已经足够快了。计算已安装应用程序的列表可能是最慢的部分,您可能希望在启动时只计算一次并缓存列表。您想从字符串中搜索吗?嗯,我想您是对的,我只是想,如果我想包括系统应用程序,我可能想做一些比这更快的事情。很好的缓存功能,但是如果他们在使用up时安装了一些东西,你会有什么建议?@Sam_k也许你可以说得更具体一些,但如果我理解你的意思,我并不是像在文本输入中那样从字符串中搜索,而是语音识别转换是一个字符串列表。@user986877 okie亲爱的,对不起,我不知道更多。塔克斯
    for(ApplicationInfo ai: pkgAppsList){
        if((ai.name).contains(voice_recog_result))
           //open Launch Intent for ai.packageName
    }