2016-01-21 57 views
0

假設我們有2個文件夾,每個文件夾中有1000個文件,我需要檢查它們中使用的類似單詞。高效比較數千個文件Java

虛擬的做法是

for(File f : folderA){ 
    for(File g : folderB){ 
     compare 
    } 
} 

但這不合理做很多比較和需要的內存和時間。我想知道有沒有更好的方法來做到這一點?

+1

算法通常是內存使用和時間之間的折中。 –

回答

1

只需使用地圖。請注意,取決於您要比較的內容,相應地修改代碼。

Map<File,Integer> map = new HashMap<>(); 
for(File f : folderA){ 
    Integer count = 0; 
    if(map.get(f)==null){ 
     map.put(f,1); 
    }else{ 
     count = map.get(f); 
     map.put(f,++count); 
    } 
} 

您可以遍歷地圖並獲取每個元素的值。每個地圖元素的值表示您的集合中有多少個相似的項目。

要遍歷圖:

for (Map.Entry<File, Integer> entry : map.entrySet()) { 

    } 

大(O)是用於該算法的線性,非常快。

+0

謝謝傑森!這解決了它! – kenlz

4

取決於你想要做什麼。

您可以創建一個Map映射File s到包含的不同單詞集合,然後比較集合對。理想情況下,假設有常識數據,這比讀取每一對文件花費的時間少得多。

或者,您可以將文字Map包含它們的文件。那麼,對於每個單詞,你都會知道它是否出現在多個文件中。