【发布时间】:2014-12-29 07:10:58
【问题描述】:
在定制的内存文件系统中,我的文件和目录采用树的形式,其中目录具有对可以是目录或文件的子节点的引用。 我可以对文件和目录进行添加、删除、删除、移动操作。现在由于某种错误,每当文件从父节点移动到另一个父节点时,它的引用不会从早期的父节点中删除。
示例
D1 (parent ) C1 ( child )
after move
D1 (parent ) C1 (child)
D2 (parent ) C1 (child)
问题: 现在的问题是找出所有具有重复父项的所有此类文件的最佳方法是什么?现在我将所有文件引用保存在一个全局哈希集中,如果我有大量文件,这猜测会很痛苦?
注意::父母知道它的所有孩子,但孩子不知道它的父母。
到目前为止采用的方法: 我正在考虑的方法是首先遍历整个目录结构,然后将所有文件引用保存在哈希集中,然后在向哈希集中插入任何值之前,我将检查它是否已经存在,如果是,那么这是一个具有重复父节点的损坏文件。
import java.io.File;
import java.util.HashSet;
import java.util.Set;
public class RecursiveFiles {
private static Set<File> set = new HashSet<File>();
public static void main(String[] args) {
File root = new File("C:\\Windows\\Help");
showFiles(root);
}
private static void showFiles(File root) {
if(root.isDirectory()){
File[] children = root.listFiles();
for(File child : children){
showFiles(child);
}
}else {
if(set.contains(root)){
System.out.println("Duplicate File " + root);
}else {
set.add(root);
}
}
}
}
【问题讨论】:
标签: java algorithm graph-algorithm