在Java中进行高效的字符串搜索

时间:2017-12-08 08:33:33

标签: java string performance search processing-efficiency

我正在使用两个大数据列表,我需要有效地检查两者之间的匹配。这是场景:

  • 逐行读取文件(此文件有100万行)
  • 对于每一行,检查字符串的ArrayList是否有匹配(此ArrayList也有大量元素)
  • 如果找到匹配项,请使用新值替换文件中的行

任何想法在效率方面解决这个问题的好方法是什么?很明显,循环使用这么多记录是无效的,而且过程很重。

感谢您的帮助!

更新 值得注意的是,我并没有特别说我需要来使用ArrayList,这只是我用来测试的东西。任何有关更高效收藏的建议都将受到欢迎。

3 个答案:

答案 0 :(得分:0)

您可以考虑通过不同的线程部分读取文件。 讨论了类似的问题here

您可以以块(例如x个字节或一行)处理文本,每个块可以由不同的线程执行,即每个块一个线程。

答案 1 :(得分:0)

如果没有更多详细信息(例如密钥的性质),很难确定,但您可能会发现使用Bloom filter非常有用,可以最大程度地减少您执行check within an ArrayList of strings whether it has a match的次数。

显然,如果查找列表随时间变化,这将无济于事。

在搜索列表之前,您可以使用Bloom过滤器进行预检查,因为如果列表中不存在该键,它可以非常快速地给您一个no个答案。如果布隆过滤器显示maybe,您仍需要搜索列表。

答案 2 :(得分:0)

你应该使用HashMap大约是O(1),或者你的字符串有很多冲突而不是你需要使用TreeSet O(logN)或Bloom过滤器。