![](/img/trans.png)
[英]What is the efficient way to compare a ArrayList of String in android
[英]What is an efficient way to compare JTrees?
我经常将数据备份到外部驱动器,并且必须浏览已拥有和尚未转移的文件。 我认为创建一个工具将非常有用,该工具将允许我选择两个目录,进行比较,然后单击几下按钮即可将文件传输过来。
我确信这类项目已经存在,所以对我来说,这主要是学习经验。
因此,首先,我有一个方法将获取所有文件夹和文件,以便填充我的树:
public static void listAllFiles(String directory, DefaultMutableTreeNode parent, Boolean recursive) {
File [] children = new File(directory).listFiles();
for (int i = 0; i < children.length; i++) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(children[i].getName());
if (children[i].isDirectory() && recursive) {
parent.add(node);
listAllFiles(children[i].getPath(), node, recursive);
} else if (!children[i].isDirectory()){
parent.add(node);
}
}
}
调用该方法后,我只需创建我的JTree并将其添加到我的视图中:
myTree = new JTree(parent);
jScrollPane1.setViewportView(myTree);
因此,一旦有了两个JTree,我将如何比较节点以查看外部文件不存在什么文件? 比较文件数组会更容易吗?
编辑
所谓高效,是指如果文件树包含成千上万个文件,则最不可能使计算机瘫痪。
我认为答案是:为什么要比较JTree? JTree是用于显示数据的GUI元素,而不是用于存储/比较/处理数据的数据结构。
因此,您应该做的是拿出一个数据结构来比较数据,然后使用JTree显示比较结果。 假设您要保留CPU资源,那么我想说您想使用TreeMap 。
本质上,您将在源文件系统上构建TreeMap
,然后在目标文件系统上找到(并匹配)它们时从TreeMap
删除它们。 完成比较后,可以在JTree
显示仍需要同步的文件。
最好的是,由于TreeMap确保containsKey
(), get
, put
和remove
方法的log(n),因此将花费nLog(n)插入源中的所有文件,而花费nLog(n)删除(基本上是比较)目标中的所有键。
编辑
哦, WinMerge是我曾经用于文件系统比较的最佳工具之一。 当然,我从未用它来同步备份驱动器...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.