我在实施此问题时遇到了一些问题。我有ArrayList
。我一直在寻找几天,我似乎无法在任何地方找到答案:
private List<FamilyTree> Tree;
我可以像这样在Trees
添加新的array
:
FamilyTree Generation = new FamilyTree();
Generation.add(new Tree());
我基本上希望能够在世代之间移动。例如,我向树中添加了一个新人
Generation.add(new Person(height, hair colour, eyes));
然后我决定,我想在上一代添加另一个人。这是Arraylist
包含当前ArrayList
(不是这个)。
我不确定我是否正在解释我的问题所以这是一个图表:
----John----Peter----Sandra----Rachel-----
/ \ | |
-Jon--Sunny---Cassie--Milo---
/ | \
Ron-Kim-Guy
所以基本上,John,Peter,Sandra和Rachel都有ArrayList
。每个人都有自己的Arraylist(s)
。假设我想从Guy添加到Rachel,我将如何在单独的数组之间来回移动?
提前致谢
答案 0 :(得分:4)
如果每个人有两个父母和任意数量的孩子,您可以使用像
这样的结构class Person {
final Person mother, father;
final List<Person> children = new ArrayList<>();
public Person(Person mother, Person father) {
this.mother = mother;
this.father = father;
mother.addChild(this);
father.addChild(this);
}
public void addChild(Person p) {
children.add(p);
}
}
如果你想向上移动materal线,你可以做类似的事情
for(Person p = ...; p != null; p = p.mother) {
}
不要考虑如何显示树,而应该思考它的表现方式。
答案 1 :(得分:1)
您不需要多维列表,只需要树。有关树的实现,请参阅this question。
多维列表例如是表格,长方体等。必须在开头知道维度,并定义数据的结构。
树有根节点和子节点,这些子节点可以在运行时获得更多子节点,所以没有限制。
答案 2 :(得分:1)
最简单的方法是每个列表都有一个对它的父级的引用。 也许如果你创建一个类似于此的对象:
public class Person{
ArrayList<Person> childs;//the child's nods
Person parent; //the parent, null if is the root
}