3

我在实现这一点时遇到了一些问题。我有一个ArrayList. 我一直在寻找几天,我似乎无法在任何地方找到答案:

private List<FamilyTree> Tree;

我可以像这样添加新Treesarray

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

所以基本上,有ArrayList约翰、彼得、桑德拉和雷切尔的首字母。各有各的Arraylist(s)。假设我想从 Guy 添加到 Rachel,我将如何在单独的数组之间来回移动?

提前致谢

4

3 回答 3

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);
   }
}

如果你想向上移动材料线,你可以做类似的事情

for(Person p = ...; p != null; p = p.mother) {

}

与其考虑如何显示树,不如考虑它的表示方式。

于 2012-04-16T11:12:03.217 回答
1

最简单的方法是每个列表都引用它的父级。也许如果您创建一个类似于此的对象 Person:

public class Person{

ArrayList<Person> childs;//the child's nods
Person parent; //the parent, null if is the root

}
于 2012-04-16T11:14:45.923 回答
1

您不需要多维列表,而是需要一棵树。有关树的实现,请参阅此问题。

多维列表例如表格、长方体等。维度必须在一开始就知道并定义数据的结构。

树有根节点和孩子,这些孩子在运行时可以得到更多的孩子,所以没有限制。

于 2012-04-16T11:11:08.077 回答