栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java树,用于表示路径列表中的文件系统(文件/目录)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java树,用于表示路径列表中的文件系统(文件/目录)

谢谢您的回答。我做了我的工作实施。我认为我将需要对其进行改进,以使其在向树结构添加元素时具有更多缓存,从而更好地工作。

正如我所说的,我需要的是一种结构,可以让我对FS进行“虚拟”再现。

MXMTree.java

public class MXMTree {    MXMNode root;    MXMNode commonRoot;    public MXMTree( MXMNode root ) {        this.root = root;        commonRoot = null;    }    public void addElement( String elementValue ) {         String[] list = elementValue.split("/");        // latest element of the list is the filename.extrension        root.addElement(root.incrementalPath, list);    }    public void printTree() {        //I move the tree common root to the current common root because I don't mind about initial folder        //that has only 1 child (and no leaf)        getCommonRoot();        commonRoot.printNode(0);    }    public MXMNode getCommonRoot() {        if ( commonRoot != null) return commonRoot;        else { MXMNode current = root; while ( current.leafs.size() <= 0 ) {     current = current.childs.get(0); } commonRoot = current; return commonRoot;        }    }}

MXMNode.java

import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class MXMNode {    List<MXMNode> childs;    List<MXMNode> leafs;    String data;    String incrementalPath;    public MXMNode( String nodevalue, String incrementalPath ) {        childs = new ArrayList<MXMNode>();        leafs = new ArrayList<MXMNode>();        data = nodevalue;        this. incrementalPath = incrementalPath;    }    public boolean isLeaf() {        return childs.isEmpty() && leafs.isEmpty();    }    public void addElement(String currentPath, String[] list) {        //Avoid first element that can be an empty string if you split a string that has a starting slash as /sd/card/        while( list[0] == null || list[0].equals("") ) list = Arrays.copyOfRange(list, 1, list.length);        MXMNode currentChild = new MXMNode(list[0], currentPath+"/"+list[0]);        if ( list.length == 1 ) { leafs.add( currentChild ); return;        } else { int index = childs.indexOf( currentChild ); if ( index == -1 ) {     childs.add( currentChild );     currentChild.addElement(currentChild.incrementalPath, Arrays.copyOfRange(list, 1, list.length)); } else {     MXMNode nextChild = childs.get(index);     nextChild.addElement(currentChild.incrementalPath, Arrays.copyOfRange(list, 1, list.length)); }        }    }    @Override    public boolean equals(Object obj) {        MXMNode cmpObj = (MXMNode)obj;        return incrementalPath.equals( cmpObj.incrementalPath ) && data.equals( cmpObj.data );    }    public void printNode( int increment ) {        for (int i = 0; i < increment; i++) { System.out.print(" ");        }        System.out.println(incrementalPath + (isLeaf() ? " -> " + data: "")  );        for( MXMNode n: childs) n.printNode(increment+2);        for( MXMNode n: leafs) n.printNode(increment+2);    }    @Override    public String toString() {        return data;    }}

Test.java测试代码

public class Test {        public static void main(String[] args) {        String slist[] = new String[] {      "/mnt/sdcard/folder1/a/b/file1.file",      "/mnt/sdcard/folder1/a/b/file2.file",      "/mnt/sdcard/folder1/a/b/file3.file",      "/mnt/sdcard/folder1/a/b/file4.file",     "/mnt/sdcard/folder1/a/b/file5.file",      "/mnt/sdcard/folder1/e/c/file6.file",      "/mnt/sdcard/folder2/d/file7.file",      "/mnt/sdcard/folder2/d/file8.file",      "/mnt/sdcard/file9.file"         };        MXMTree tree = new MXMTree(new MXMNode("root", "root"));        for (String data: slist) { tree.addElement(data);        }        tree.printTree();    }}

如果您有关于即兴创作的好建议,请告诉我:)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/414463.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号