使用Java中的集合中的通配符返回字符串列表的最快方法

Mat*_* B. 0 java collections search

我有100000字符串.例如,我希望从该集合中获取以"JO"开头的所有字符串.什么是最好的解决方案?

我在想Aho-Corasick,但我的实现不支持外卡.

Pet*_*rey 10

如果你想要所有以序列开头的字符串,你可以将所有字符串添加到像TreeSet这样的NavigableSet中,并获取subSet(text, text+'\uFFFF')将为你提供的所有条目text 以此查找为O(log n)


如果你想让所有的字符串以序列结束,你可以做类似的事情,除非你必须反转字符串.在这种情况下,从反向String到转发String的TreeMap将是更好的结构.

如果你想要"x*z",你可以使用第一组进行搜索,并使用Map的值进行联合.

如果你想包含" x ",你可以使用Navigable <String,Set <String >>,其中键是每个String从第一个,第二个,第三个char开始等.值是一个Set,因为你可以得到重复.您可以像结构一样进行搜索.

  • 哇,伟大的回答彼得.+1 (3认同)
  • 那很优雅!但是如果你还没有`TreeSet`,填充它将是'O(n log n)`,当只是简单地搜索`ArrayList`是'O(n)` (2认同)