我需要在 Java 中创建一个类似于附件图像的树结构。根有 n 个对象 A 节点,对象 A 节点只有一个节点。
谁能建议我最好的数据结构来表示这种层次结构?
这是我到目前为止尝试过的
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));
}
}
谁能建议我最好的数据结构来表示这种层次结构?
没有“最好的”数据结构。有各种具有不同属性的替代品。但是在不知道所需的属性、您的应用程序将如何使用数据结构以及您判断“最佳”的标准的情况下,我们无法告诉您哪个是正确的选择。
但是,这个使用标准集合类型的简单数据结构几乎与您的图表匹配:
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[]
。同上列表和集合的实现类。这些将取决于您的(未说明的)要求。