2016-01-21 41 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包含它们的文件。那么,对于每个单词,你都会知道它是否出现在多个文件中。