如何搜索在一个巨大的文本文件中有重复的值周围五十万条记录

如何搜索在一个巨大的文本文件中有重复的值周围五十万条记录

问题描述:

我的txt文件,该文件中记录的形式有数据(每行是一个记录,代表或多或少像一个数据库表)的输入和我需要找到重复的值。例如:如何搜索在一个巨大的文本文件中有重复的值周围五十万条记录

Rec1: ACCOUNT_NBR_1*NAME_1*VALUE_1 
Rec2: ACCOUNT_NBR_2*NAME_2*VALUE_2 
Rec3: ACCOUNT_NBR_1*NAME_3*VALUE_3 

在上述组中,REC1和REC2被认为是重复的帐户号码是相同的(ACCOUNT_NBR1)。

注意:上面显示的输入文件是分隔符类型文件(分隔符是*),但文件类型也可以是固定长度文件,其中每列以指定位置开始和结束。

我目前这样做有以下逻辑:

Loop thru each ACCOUNT NUMBER 
    Loop thru each line of the txt file and record and check if this is repeated. 
    If repeated record the same in a hashtable. 
    End 
End 

,我使用“模式” &“的BufferedReader的Java API来执行上述任务。

但由于它走的是一条很长一段时间,我想知道的处理它一个更好的办法。

感谢, 石埠

保持{account_number, occurrences}一个HashMap存储器(最初为空),并遍历文件只有一次,设置或增加(在HashMap)你在遇到每个账号出现的次数遍历。

如果您还必须打印有关重复帐号的完整信息,请执行第二遍输入文件,此时将打印关于每个帐号的完整详细信息,其中HashMap期间的相应出现次数超过1先前的遍历。

就内存使用情况而言,即使500k-line-file中的所有帐号都不相同,您只需要大约1M整数存储空间(假设帐号为整数)加上HashMap开销,这应该都适合在几兆内存。

+0

感谢V,我非常关心内存使用情况w.r.t上面的方法,因为正如你所说的,HashMap和500K记录(int值)将适合几MB的内存,将继续采用这种方法。 – Shibu 2010-04-08 07:36:34