【发布时间】:2018-05-22 11:12:09
【问题描述】:
我正在处理两个大数据列表,我需要有效地检查两者之间的匹配。这是场景:
- 逐行读取文件(该文件有100万行)
- 对于每一行,检查一个 ArrayList 中的字符串是否匹配(这个 ArrayList 也有大量元素)
- 如果找到匹配项,则将文件中的行替换为新值
任何想法在效率方面解决这个问题的好方法是什么?显然,循环遍历这么多记录的效率极低且处理繁重。
感谢您的帮助!
更新 值得注意的是,我并不是说我需要 使用 ArrayList,这只是我用于测试的东西。欢迎任何关于更高效收藏的建议。
【问题讨论】:
-
不是重复的或任何东西,但this answer 可能会有所帮助
-
为什么要使用 ArrayList 来检查匹配项?改用 HashSet 不是更好吗?
-
在您的上下文中“匹配”是什么意思?
fileLine.equals(collectionElement)? -
正如 Ralf Renz 所说,使用 hashMap 作为第二个列表。然后将是 O(N) 时间检查所有匹配项。此外,如果第一个列表是一个集合(没有重复值),那么您可以删除 hashMap 中已经匹配的值。我还假设您没有检查新值的匹配项,是吗?
-
这取决于您是否可以将行解析为单词,或者您想要支持任何字符串的通用方法(不一定受单词边界的限制)。第一个最好使用单词索引(Bloomfilter、Hashmap、Trie),第二个使用多字符串匹配算法(例如 Aho-Corasick)。
标签: java string performance search processing-efficiency