2010-04-08 42 views
2

我的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來執行上述任務。

但由於它走的是一條很長一段時間,我想知道的處理它一個更好的辦法。

感謝, 石埠

回答

4

保持{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

相關問題