有效地比较数千个文件Java

时间:2016-01-21 15:59:11

标签: java algorithm string-comparison

假设我们有两个文件夹,每个文件夹中有1000个文件,我需要检查其中使用的类似单词。

虚拟方法将是

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

但这样做会不合理地进行许多比较,这需要记忆和时间。我想知道有更好的办法吗?

3 个答案:

答案 0 :(得分:4)

取决于您尝试做什么。

您可以为包含的不同单词集创建Map映射File,然后比较成对的集合。理想情况下,假设常识数据,读取每对文件所需的时间要少得多。

或者,您可以在包含它们的文件中添加Map个单词。那么,对于每个单词,您都知道它是否出现在多个文件中。

答案 1 :(得分:1)

只需使用地图。注意,取决于您要比较的内容,相应地修改代码。

WHERE component_item LIKE "*SBP"

您可以遍历地图并获取每个元素的值。每个地图元素的值表示您的集合中有多少相似的项目。

循环播放地图:

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);
    }
}

此算法的Big(O)是线性的,非常快。

答案 2 :(得分:0)

我可以补充一点,如果您要检查相似之处,而不是相同的字词,我建议您计算doubleMetaphone,请参阅https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/language/DoubleMetaphone.html 所有相关单词(删除&#34; the,this&#34;等等)。