【发布时间】:2014-08-13 15:06:10
【问题描述】:
假设我有一个 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 必须始终是实际的。
【问题讨论】:
-
我要注意的是,列出的代码第一次不会调用
visitURL...它调用readDocument,而你还没有给我们这个代码。 -
从哪里提取文档的链接?
标签: java multithreading copyonwritearraylist