【问题标题】:How to search for duplicate values in a huge text file having around Half Million records如何在具有大约 50 万条记录的巨大文本文件中搜索重复值
【发布时间】:2012-08-25 04:06:15
【问题描述】:

我有一个输入 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 NUMBERS 相同(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

我正在使用“Pattern”和“BufferedReader”java API 来执行上述任务。

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

谢谢, 涩

【问题讨论】:

    标签: java file text


    【解决方案1】:

    在内存中保留HashMap{account_number, occurrences}(最初为空),并且只遍历文件一次,设置或递增(在HashMap 中)您在遍历期间遇到的每个帐号的出现次数。

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

    在内存使用方面,即使 500k 行文件中的所有帐号都是不同的,您也只需要大约 1M 整数存储(假设帐号是整数)加上 HashMap 开销,这些都应该很适合几兆内存。

    【讨论】:

    • 谢谢 V,我非常关心上述方法的内存使用情况,因为正如你所说,HashMap 以及 500K 记录(int 值)将适合几 MB 的内存,将继续用这种方法。
    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 2021-06-14
    • 2014-02-05
    • 1970-01-01
    • 2011-05-01
    • 2020-03-15
    • 1970-01-01
    • 2014-04-10
    相关资源
    最近更新 更多