如何在大列表<string>中搜索subString - Java

时间:2017-06-27 10:26:17

标签: java android

我有一个大约{50,000}记录的list<String>。我想要一种有效的方法来搜索subString中的特定List并获取包含该Strings的{​​{1}}。

到目前为止,我的代码是这样的:

subString

3 个答案:

答案 0 :(得分:1)

这取决于有效的含义。

如果你想获得“最小”的CPU使用率,那么你无能为力:你必须迭代该列表;并比较所有条目。 唯一明显的做法是:为每个循环体调用tag.toLowerCase()。在进入循环之前,只需计算一次的值!

如果你关心在更短的时间内获得结果,答案很简单:使用多个线程,并让每个线程搜索整个列表的“切片”(当然,这可能很快变得复杂,因为你现在必须保留秩序和其他微妙的东西。)

最后:您可能希望查看ElasticSearch这样的工具 - 因为有各种产品专门用于实现这一目标:搜索巨大数量的文本。

答案 1 :(得分:0)

考虑使用SQL数据库来保存大量数据。

通过这种方式,您可以使用简单查询来获取包含子字符串的结果String(请参见下面的示例)。此外,您的内存将没有加载到列表中的数据量。

e.g。

SELECT * from word_list_table WHERE word LIKE'%substring%'

答案 2 :(得分:0)

如果您的处理器有多个核心,请使用并行流。

List<String> result = lines.parallelStream() //convert list to parallel stream
            .filter(line -> file.toLowerCase().contains(tag.toLowerCase()))    // check your condition 
            .collect(Collectors.toList());     // collect output    

如果您的处理器有多个核心,上面的代码将更快地处理您的字符串,因为打开了并行流。