【发布时间】:2011-11-29 05:30:20
【问题描述】:
我有一个任务,我必须遍历数十亿行字符串并检查每一个是否都是唯一的。 PC 的 RAM 内存中无法容纳所有线路本身。此外,行数可能大于 Integer.MAX_VALUE。
我假设处理这么多数据的最佳方法是将每个字符串的哈希码放入某种哈希表中。
所以,这是我的问题:
- 我应该使用什么来代替
String.hashCode()? (返回值是int,但我可能需要long) - 处理这种大小的列表的最快方式/框架是什么?我最需要的是能够快速检查列表是否包含元素
【问题讨论】:
-
为什么不利用数据库的力量呢?是否需要严格在java中完成?
-
如果它是一个选项,“数据库”的想法是伟大的。此外,您需要考虑两种“最坏情况”:a)每个字符串都是唯一的,b)每个字符串都是相同的。无论您想出什么解决方案,您是否拥有处理这两种情况的磁盘/RAM 容量和时间/计算能力?
-
行数可以有多大?我知道大于 MAX_VALUE - 大于 32 * MAX_VALUE?大于...?
-
最大字符串数可能在 int32.maxValue 和 int64.maxValue 之间。坦率地说,数据库看起来不错,但这是完成任务的最快方法吗?我的意思是,在实施后的执行时间?
-
在 Unix 上,我会使用
sort {file} | uniq -c来查找重复的字符串。也许您不需要编写程序来执行此操作。
标签: java data-structures bigdata hashset