【发布时间】:2018-11-16 09:51:07
【问题描述】:
每天我都会收到一份包含 30-40k 行的列表,每行包含有意义或无意义的名称,例如 fastcar、ultrafastcar、blablablacar 等。
我还有一个大列表,其中包含任何语言的所有单词(大约 50k 行)。
并且我想将第一个列表与第二个列表进行比较,以过滤哪些包含(或以 - 结尾)来自第二个列表的单词。我的意思是如果单词“ultrafastcar”那么它不会被过滤但“blablacar”会被过滤掉。
我已经准备了一些 Java 代码,但是比较列表需要很长时间。我使用了 ArrayLists 并将它们与 contains()、startsWith() 方法进行了比较。 ArrayLists 是正确的选择吗?除了这些方法,我还能用什么算法来比较它们。
【问题讨论】:
-
50k 不算大,应该可以很快搞定。查看 ArrayList 和
parallelStream()以轻松添加一些并发性(它在后台使用 fork join)。 -
你的单词列表排序了吗?如果是这样,您是否使用二进制搜索?哈希映射可能比列表更快。
-
第二个列表(字典单词)被排序。我没有尝试二分搜索。
-
第二个列表的HashSet
-
鉴于 OP 正在寻找子字符串,hash set set 在这里真的对您有帮助吗? Aho-Corasick 听起来更有用。
标签: java collections compare