Java 中的层次树实现 [关闭]

问题描述 投票:0回答:1

我需要在 Java 中创建一个类似于附件图像的树结构。根有 n 个对象 A 节点,对象 A 节点只有一个节点。 enter image description here 谁能建议我最好的数据结构来表示这种层次结构?

这是我到目前为止尝试过的


import java.util.LinkedList;
import java.util.List;

public class Test {

    public static class ObjectA {
        int accountId;
        List<ObjectA> children = new LinkedList<>();

        ObjectA(int data) {
            accountId = data;
        }

        ObjectA(int data, List<ObjectA> child) {
            accountId = data;
            children = child;
        }
    }

    public static void main(String[] args) {
        
        ObjectA root = new ObjectA(1);
        
        root.children.add(new ObjectA(2));
        root.children.add(new ObjectA(3));
        root.children.add(new ObjectA(4));
        
        root.children.get(0).children.add(new ObjectA(5));
        root.children.get(0).children.add(new ObjectA(6));
        root.children.get(0).children.add(new ObjectA(7));
        
        root.children.get(1).children.add(new ObjectA(8));
        
        root.children.get(2).children.add(new ObjectA(9));
        root.children.get(2).children.add(new ObjectA(10));
        root.children.get(2).children.add(new ObjectA(11));
    }
}
java tree
1个回答
1
投票

谁能建议我最好的数据结构来表示这种层次结构?

没有“最好的”数据结构。有各种具有不同属性的替代品。但是在不知道所需的属性、您的应用程序将如何使用数据结构以及您判断“最佳”的标准的情况下,我们无法告诉您哪个是正确的选择。

但是,这个使用标准集合类型的简单数据结构几乎与您的图表匹配:

public class Root {
    private List<A> children;
}

public class A {
    private List<B> children;
}

public class B {
    ...
}

上面和你的图表之间的唯一区别是(与上面的)你不能从一个

B
导航到下一个
B
A
对象的
children
列表中。如果您需要能够执行 that 那么您需要将
B
对象链接起来,并且没有现成的 Java SE 类实现它。 (提示:
LinkedList
不......尽管它的名字。)

这就是后者的样子:

public class Root {
    private List<A> children;
}

public class A {
    private B child;
}

public class B {
    private B child;
}

...你需要添加一堆方法来管理

B
对象的链。

private List<A> children
应该是
List
Set
还是有序的
Set
是值得商榷的。或者也许是您自己管理的
A[]
。同上列表和集合的实现类。这些将取决于您的(未说明的)要求。

© www.soinside.com 2019 - 2024. All rights reserved.