Supwb的gravatar头像
Supwb 2015-05-08 23:09:23

一个10G文件内容存的都是整型数据,如何更高效的去重?

一道Java笔试题。困惑啊,大牛们,求破解。

有一个100M文件,已知文件存的都是整型,存在重复。要求去除重复。如果文件是10G呢?

//有一颗最求极致的心,奈何肚里墨水不多。

所有回答列表(3)
最代码官方的gravatar头像
最代码官方  LV167 2015年5月8日

提供下算法思路吧。

1.将文件的内容按行数进行n等分

2.n个线程从指定的位置读取内容

3.n个线程公用一个线程安全的变量来记录读取到的整数

1)注意先要判断是否存在该整数,读和写都要进行同步。

2)读取文件可以通过nio

参考资料:

java对比IO和NIO的文件读写性能测试

java读取文件最后N行

获取上G的文件行数的最快速的代码

评论(1) 最佳答案
whalson的gravatar头像
whalson 2015年5月11日

首先必须先根据哈希算法进行散列,把大文件分成若干个小文件。

然后就可以并行的进行剃重操作了。

最后将结果合并就行。

joy115的gravatar头像
joy115 2015年5月28日

最简单的是可以放到Set集合里面,Set集合本身有唯一 不重复的特性,自身的算法已经实现去重。不过效率会很低。可以结合其他思路使用。

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友