假设我们有两个文件夹,每个文件夹中有1000个文件,我需要检查其中使用的类似单词。
虚拟方法将是
for(File f : folderA){
for(File g : folderB){
compare
}
}
但这样做会不合理地进行许多比较,这需要记忆和时间。我想知道有更好的办法吗?
答案 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;等等)。