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

标签 java android string search

现在我正在开发一个使用语音识别的 Android 应用程序。基本上,我想知道从语音识别中获得字符串后最好的搜索方法是什么。我目前正在包名称列表上使用线性搜索,使用以下命令获取该列表:

    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);
    }

我决定使用 ApplicationInfo 列表(pkgAppsList)并对其进行搜索可能更好,但是是否有比简单的线性搜索并使用结果打开应用程序更快的方法来搜索该列表带着 Intent 。 现在我能想到的就是:

    for(ApplicationInfo ai: pkgAppsList){
        if((ai.name).contains(voice_recog_result))
           //open Launch Intent for ai.packageName
    }

有没有一种可以与 contains 方法一起使用的更快的搜索方法,或者可以在不使用 contains 方法的情况下执行此操作的方法?

最佳答案

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

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

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

关于java - 如何使用 String.contains 在 java 中最好地搜索字符串列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8032622/

相关文章:

java - 如何在内部类初始化时访问自己的变量?

java - 无法使 EclipseLink 使用方法而不是字段

android - 通过tcpdump抓取HTTP包体

java - Eclipse 在创建新项目或新类时卡住

java - Android 应用程序在重新启动时崩溃

Java 工作日输入验证

c++ - 将一个输入文件与给定数量的文件匹配的算法

C# - 类似于字符串构造函数但不能返回结果

java - 在 Android 中获取 View 的 alpha/不透明度

java - 无法打开 ServletContext 资源 [/src/main/resources/security-context.xml]