java - 在 ArrayList 中查找字符串索引的更快方法

标签 java list indexof

所以我有这样的东西:

List<String> test = new ArrayList<String>();

当我打印它时,我有:

"[ABC, DEF, GHI, JKL]"

我想搜索“E”的示例索引。我是这样做的:

for (String a : test) {
   if(a.contains("E")) {
      System.out.println(test.indexOf(a));
   }
}

有没有更快的方法来做到这一点?因为现在我每次都在所有列表上制作“for”。

最佳答案

您可以使用置换索引,通常用于单词:

["he speaks well", "well done"]

会给出一个排序列表

     well *done*
          *he* speaks well
       he *speaks* well
he speaks *well*
          *well* done

在那里你可以快速找到“好”。

在我们的例子中,这样的列表条目将是:

class Entry implements Comparable<Entry> {
    String right;
    String left;

    @Override
    public String toString() { return left + "^" + right; }
}

对于每个长度为 N 的字符串,都有 N、N-1、...、2、1 个字符的正确个值。

class SearchBase {
    private List<Entry> entries; // Or immediately sorted: TreeSet

    void addAll(String... terms) {
        fill list entries, and sort them
    }

    Collection<String> termsContaining(String sought) {
        binary search on entries rigth
    }
}

关于java - 在 ArrayList 中查找字符串索引的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31938619/

相关文章:

python - 在 python 中查找另一个项目最接近列表中哪两个元素的最快方法

python - 在没有设置的情况下更快地获得两个列表的差异

javascript - 为什么 IE7 javascript array.indexOf 不工作?

java - 使用子字符串的数组中元素的索引

java - Cassandra:查询结果中缺少列

java - 如何在 Java 中调用 XPath position() 函数?

python - 贪婪算法将数字列表的列表分成两个分区,每个分区在 Python 中的数量相同

java - Clojure 中的链接 vector 元素

java - 大 O 符号用于访问链表和二进制搜索中的中间元素?

java - LinkedList的indexOf方法检查