java 大文本去重_使用java如何对一个大的文本文件内容进行去重

本文介绍了如何处理超过内存限制的大文本文件去重问题。通过计算每行字符串的hashCode并取模,将相同余数的行写入对应的小文件,然后分别对小文件进行去重,最后合并结果,避免了内存溢出的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

今天从cdlinux论坛中下载了一份密码字典,纯txt文本文件,一个密码一行,加起来有1.5亿行,2G+,但是我怀疑里面有重复的密码,所以想对文件内容进行去重处理。

分析

一般可能会想到一次将文本内容读取到内存中,用HashSet对内容去重,但是很不幸这个过程jvm会内存溢出,无奈,只能另想办法,首先将这个大文件中的内容读取出来,对每行String的hashCode取模取正整数,可用取模结果作为文件名,将相同模数的行写入同一个文件,再单独对每个小文件进行去重,最后再合并。

有内存溢出风险的写法:

public static void distinct() {

File ff = new File("G://password/all.txt");

File distinctedFile = new File("G://password/all-distinced.txt");

PrintWriter pw = null;

SetallHash = null;

FileReader fr = null;

BufferedReader br = null;

try {

pw = new PrintWriter(distinctedFile);

allHash = new HashSet();

fr = new FileReader(ff);

br = new BufferedReader(fr);

String l

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值