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

标签 java search collections

我有 100000 个字符串。例如,我想从该集合中获取所有以“JO”开头的字符串。最好的解决方案是什么?

我在想Aho-Corasick but the implementation I have不支持通配符。

最佳答案

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

<小时/>

如果你想要所有的字符串都以一个序列结尾,你可以做类似的事情,只不过你必须反转字符串。在这种情况下,从反向字符串到正向字符串的 TreeMap 将是一个更好的结构。

如果您想要“x*z”,您可以使用第一组进行搜索,并与 map 的值进行并集。

如果你想包含“x”,你可以使用 Navigable> 其中键是从第一个、第二个、第三个字符等开始的每个字符串值是a 设置,因为您可以获得重复项。您可以像开头结构一样进行搜索。

关于java - 在 Java 中使用集合中的通配符返回字符串列表的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5952553/

相关文章:

java - 当我将 url-pattern 更改为 "/"时,无法访问静态资源

java - Javascript 和 Phonegap 插件之间的异步通信

java - 使用 docker 和 kubernetes 部署的 Spring-boot 微服务应用程序 : Services not communicating

search - 在Elasticsearch中提升具有特定标签的匹配文档

c++ - 在不使用 for 或 while 的情况下在排序数组中查找元素

javascript - List.js 不适用于表格

java - 为什么 List<T>.toArray() 返回泛型 Object[] 而不是 T[]?

java - 无法使用 FirebaseRecyclerAdapter 将 Firebase JSON 转换为 Java 对象

java - ArrayList 中的 remove()

java - 来自单个对象的接口(interface)集合