如何搜索在一个巨大的文本文件中有重复的值周围五十万条记录
问题描述:
我的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
开销,这应该都适合在几兆内存。
感谢V,我非常关心内存使用情况w.r.t上面的方法,因为正如你所说的,HashMap和500K记录(int值)将适合几MB的内存,将继续采用这种方法。 – Shibu 2010-04-08 07:36:34