Java 通过搜索在内存中设置

Java Set in memory with search

我需要在内存中缓存大量数据,并且能够非常高效地进行搜索。它本质上是一个字符串列表,对于给定的输入,我想 return 包含该输入的字符串列表。

例如,如果列表包含以下字符串:

abc def
def ghi
ghi jkl

并且输入是:

ef

我想return前两个字符串作为输出(最好按字母顺序)。

我在想用一个JavaSet的实现,把所有的字符串放在里面,放在内存里。对于任何给定的输入,我将遍历 Set 并使用 String.contains() 查找包含输入的记录,并将结果添加到另一个 SetList.

这是完成此任务的最有效方法吗?性能非常重要,数据量非常大(10 兆字节)。如有必要,我可以为此目的拥有一个具有大量内存的专用服务器实例。

SetHashSet 尤其不会提供出色的性能,因为您必须遍历整个 set 并执行 contains 来检查是否输入是一个子串。你肯定需要一个字符串数据结构。

最后,您可以只使用 Lucene,它是 Java 的文本倒排索引,也可以在堆外工作