Java中的树结构?

Java中的树结构?,java,tree,Java,Tree,我想实现一个树结构。树中的每个节点都包含一个我选择的对象,以及指向每个子节点(可能还有父节点)的链接。我想知道Java中是否存在类似的东西,例如: T randomObject = new randomObject(); Node<T> root; root.setObject(randomObject); root.addChild( ... .... root.getFirstChild().getObject().getObjectProperty(); T randomO

我想实现一个树结构。树中的每个节点都包含一个我选择的对象,以及指向每个子节点(可能还有父节点)的链接。我想知道Java中是否存在类似的东西,例如:

T randomObject = new randomObject();
Node<T> root;
root.setObject(randomObject);
root.addChild( ... 
....
root.getFirstChild().getObject().getObjectProperty();
T randomObject=新的randomObject();
节根;
setObject(randomObject);
root.addChild(。。。
....
root.getFirstChild().getObject().getObjectProperty();
我已经研究了节点结构(org.w3c.dom.Node),但它似乎不能存储对象,似乎更适合解析文档

我还研究了DefaultMutableTreeNode、MutableTreeNode和TreeNode,但是我没有找到明确的用法示例。我遇到了很多问题。例如,当将DefaultMutableTreeNode作为参数传递时(似乎不起作用),或者当获取DefaultMutableTreeNode的子级时,它似乎只返回一个TreeNode,而我显然已经将DefaultMutableTreeNode添加为子级


我是Java新手,所以任何信息都会非常有用。Oracle文档没有那么大帮助。我使用过向量结构,它非常容易使用,可以存储对象,易于访问,我想知道是否存在类似的东西。谢谢。

几天前我想要类似的东西。这就是我想要的d:

public class MyTreeNode extends DefaultMutableTree{
  //add all your objects here
}
DefaultMutableTree具有预定义的方法,如add()->要添加子节点,它使用枚举并提供标准方法来使用预排序和后排序处理访问子节点。

签出

用于从文档、文件等构建树节点的轻量级java库

public class ReadMe {

    public static void main(String [] args) {

        TreeBuilderFactory treeBuilderFactory = new TreeBuilderFactoryImpl();

        // For displaying each JTree
        //
        JScrollPane scrollPane  = new JScrollPane();
        scrollPane.setBounds(0, 0, 300, 300);

        // DocumentTreeBuilder 
        //
        Document doc = loadDocument(
             new File(System.getProperty("user.home")+"/Documents/Desktop/welcome.xml"));

        DOMTreeBuilder domTreeBuilder = treeBuilderFactory.getDOMInstance();

        Filter<Node> nodeFilter = null; // May be null

        TreeNode docRootNode = domTreeBuilder.build(doc, nodeFilter);

        JTree documentTree = new JTree(docRootNode);

        // Display the JTree
        //
        scrollPane.setViewportView(documentTree);
        JOptionPane.showMessageDialog(null, scrollPane);


        // FileTreeBuilder
        //
        File dir = new File(System.getProperty("user.home")+"/Documents");

        TreeBuilder<File> fileTreeBuilder = 
                 treeBuilderFactory.getInstance(TreeBuilderFactory.FILE);
        // This also works
        //FileTreeBuilder fileTreeBuilder = treeBuilderFactory..getFileInstance(); 

        Filter<File> fileFilter = new Filter<File>() {
            @Override
            public boolean accept(File f) {
                return f.isDirectory() || f.getName().endsWith(".docx");
            }
        };

        TreeNode fileRootNode = fileTreeBuilder.build(dir, fileFilter);

        JTree fileTree = new JTree(fileRootNode);

        // Display the JTree
        //
        scrollPane.setViewportView(fileTree);
        JOptionPane.showMessageDialog(null, scrollPane);


        // MapTreeBuilder
        //
        MapTreeBuilder mapTreeBuilder = treeBuilderFactory.getMapInstance();

        final HashMap map = new HashMap();
        map.put("boolean", Boolean.TRUE);
        map.put("number", 100);
        map.put("List", new String[]{"1", "2", "3"});
        HashMap grandChildren = new HashMap();
        grandChildren.put("grandChild", "I am a grand child");
        map.put("hasChildren", grandChildren);

        Map.Entry rootEntry = mapTreeBuilder.createRootEntry(map);

        TreeNode mapRootNode = mapTreeBuilder.build(rootEntry, null);

        JTree mapTree = new JTree(mapRootNode);

        // Display the JTree
        //
        scrollPane.setViewportView(mapTree);
        JOptionPane.showMessageDialog(null, scrollPane);
    }

    private static Document loadDocument(File file) {
        Document doc;
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = factory.newDocumentBuilder();
            doc = docBuilder.parse(file);
        }catch (SAXException | IOException | ParserConfigurationException e) {
            e.printStackTrace();
            doc = null;
        }
        return doc;
    }
}
公共类自述文件{
公共静态void main(字符串[]args){
TreeBuilderFactory TreeBuilderFactory=新建TreeBuilderFactoryImpl();
//用于显示每个JTree
//
JScrollPane scrollPane=新的JScrollPane();
滚动窗格.设置边界(0,0,300,300);
//文档树生成器
//
文档doc=loadDocument(
新文件(System.getProperty(“user.home”)+“/Documents/Desktop/welcome.xml”);
DOMTreeBuilder DOMTreeBuilder=treeBuilderFactory.getdomininstance();
Filter nodeFilter=null;//可能为null
TreeNode docRootNode=domTreeBuilder.build(doc,nodeFilter);
JTree documentTree=新的JTree(docRootNode);
//显示JTree
//
scrollPane.setViewportView(documentTree);
showMessageDialog(空,滚动窗格);
//FileTreeBuilder
//
File dir=新文件(System.getProperty(“user.home”)+“/Documents”);
TreeBuilder文件TreeBuilder=
获取实例(treeBuilderFactory.FILE);
//这同样有效
//FileTreeBuilder FileTreeBuilder=treeBuilderFactory..getFileInstance();
Filter fileFilter=newfilter(){
@凌驾
公共布尔接受(文件f){
返回f.isDirectory()| | f.getName().endsWith(“.docx”);
}
};
TreeNode fileRootNode=fileTreeBuilder.build(dir,fileFilter);
JTree fileTree=新的JTree(fileRootNode);
//显示JTree
//
scrollPane.setViewportView(文件树);
showMessageDialog(空,滚动窗格);
//MapTreeBuilder
//
MapTreeBuilder MapTreeBuilder=treeBuilderFactory.getMapInstance();
final HashMap map=新HashMap();
map.put(“boolean”,boolean.TRUE);
地图放置(“数字”,100);
put(“List”,新字符串[]{“1”、“2”、“3”});
HashMap孙辈=新HashMap();
孙子孙女。放(“孙子孙女”,“我是孙子孙女”);
地图。put(“有子女”,孙子孙女);
Map.Entry rootEntry=mapTreeBuilder.createRootEntry(Map);
TreeNode mapRootNode=mapTreeBuilder.build(rootEntry,null);
JTree-mapTree=新的JTree(mapRootNode);
//显示JTree
//
scrollPane.setViewportView(映射树);
showMessageDialog(空,滚动窗格);
}
私有静态文档loadDocument(文件文件){
文件文件;
试一试{
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=factory.newDocumentBuilder();
doc=docBuilder.parse(文件);
}捕获(SAXException | IOException | ParserConfiguration异常e){
e、 printStackTrace();
doc=null;
}
退货单;
}
}

好的,a是一个由红黑树支持的地图。你到底想构建什么样的树?据我所知,Java并没有以这种方式预先实现树数据结构。然而,在线上有很多好的树,并且很容易在网上创建或修改。有关详细信息,请参阅谷歌结果“java树实现”: