Java 如何在一个有大约50万条记录的巨大文本文件中搜索重复值

Java 如何在一个有大约50万条记录的巨大文本文件中搜索重复值,java,file,text,Java,File,Text,我有一个输入txt文件,它以记录的形式包含数据(每一行都是一个记录,表示的或多或少像一个DB表),我需要找到重复的值。例如: 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) 注意:上面显示的输入文件是一个定界符类型的文件(定界符为*),但是文件类

我有一个输入txt文件,它以记录的形式包含数据(每一行都是一个记录,表示的或多或少像一个DB表),我需要找到重复的值。例如:

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”JavaAPI来执行上述任务

但由于这需要很长时间,我想知道一个更好的处理方法

谢谢, Shibu

在内存中保留一个
{account\u number,executions}
(最初为空),只遍历文件一次,设置或增加(在
HashMap
中)遍历过程中遇到的每个帐号的出现次数

如果您还必须打印有关重复帐号的完整信息,则对输入文件执行第二次遍历,这一次打印有关每个帐号的完整详细信息,其中在上一次遍历期间,
HashMap
中出现的相应次数超过了
1


在内存使用方面,即使一个500k行文件中的所有帐号都是不同的,您也只需要大约1M的整数存储(假设帐号是整数)加上
HashMap
开销,这些开销都应该可以轻松地放入几兆字节的内存中。

,我非常关心的是上述方法的内存使用情况,因为正如您所说的,HashMap和500K记录(int值)将适合几MB的内存,将继续使用这种方法。