假设我有一个 xml 文档,我可以在其中找到指向相同类型的其他文档的链接,这些文档也可以具有指向另一个文档的链接。在起点,我有要阅读和分析的文件列表。我编写了以下算法来阅读和分析这些文档:
private static List<String> documentNames = new ArrayList<String>();
main(...) {
//add names to documentNames arrayList above.
for(String documentName : documentNames) {
readDocument(documentName);
}
}
函数 readDocument 如下所示:
private static CopyOnWriteArrayList<String> visitURL(String documentName) {
CopyOnWriteArrayList<String> visitedDocs = new CopyOnWriteArrayList<String>(); //visited Ref urls
if (!visitedDocs .contains(documentName)) {
analyseAndWriteOnDisk(documentName) //it saves analised document on disk
CopyOnWriteArrayList<String> tmp = visitURL(documentName);
visitedDocs.addAll(tmp);
} else {
System.out.println(documentName " - I have seen it !");
}
return visitedDocs;
}
它可以工作,但是在执行程序后,我可以找到重复的文件(具有相同内容的文件)。我不应该拥有它们 - 我通过函数 visitURL 中的 if 条件来阻止它。我的问题是:什么在这里不起作用?我想用数组visitedDocs 操作有问题。如何使用已访问的文件进行每个递归调用实际版本的数组?
尽我所能,我有一个递归函数,它在一些集合 X 上运行:
recursion(CollectionType X) {
someoperations(X)
recursion(X)
}
并且X
必须始终是实际的。