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