![](/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.