当单词超过2亿时,如何使用Java删除重复单词?
2022-09-02 00:24:31
我有一个文件(大小= ~1.9 GB),其中包含约220,000,000(约2.2亿)个单词/字符串。他们有重复,几乎每100个单词就有1个重复的单词。
在我的第二个程序中,我想读取文件。我成功地使用BufferedReader按行读取文件。
现在要删除重复项,我们可以使用 Set(及其实现),但 Set 存在问题,如以下 3 种不同的方案所述:
- 使用默认的 JVM 大小,Set 最多可以包含 0.7-0.8 百万字,然后是 OutOfMemoryError。
- 对于512M JVM大小,Set最多可以包含5-600万字,然后是OOM错误。
- 使用1024M JVM大小,Set最多可以包含12-1300万字,然后是OOM错误。在这里,将1000万条记录添加到Set中后,操作变得非常缓慢。例如,添加下一个 ~4000 条记录,需要 60 秒。
我有限制,我不能进一步增加JVM大小,我想从文件中删除重复的单词。
如果您对使用Java从这样一个巨大的文件中删除重复单词的任何其他方法/方法有任何想法,请告诉我。非常感谢:)
添加信息到问题:我的话基本上是字母数字,它们是我们系统中唯一的ID。因此,它们不是简单的英语单词。