2012-04-16 96 views
3

我有幾個問題實現這一點。我有一個ArrayList。我一直在尋找了幾天,我似乎無法找到任何地方的答案:多維Arraylist Java

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 

所以基本上,有約翰,彼得,桑德拉和Rachel的初始ArrayList。每個人都有自己的Arraylist(s)。假設我想從Guy中添加到Rachel,我將如何在單獨的數組之間來回移動?

在此先感謝

+0

你的問題根本不清楚,而且你沒有顯示有意義的代碼。但我覺得你只需要'rootPersons.remove(rachel); guy.addChild(拉結);'。請遵守Java命名約定:變量以小寫字母開頭。 – 2012-04-16 11:13:58

回答

1

您不需要多維列表,而是一棵樹。有關樹的實現,請參閱this question

多維列表例如表,立方體等。維度必須在開始時被知道並且定義了數據的結構。

樹有根節點和子節點,這些子節點在運行時可以得到更多的子節點,所以沒有限制。

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

最簡單的方法是列表中的每一個都有一個對其父項的引用。 也許如果你創建一個對象與此類似的人:

public class Person{ 

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

}