2012-04-16 19 views
3

これを実装するいくつかの問題があります。私はArrayListを持っています。私は今、数日を探していると私はどこにでも答えを見つけるように見えることはできません。多次元Arraylist Java

private List<FamilyTree> Tree; 

私はこのようなarrayに新しいTreesを追加することができます。私は基本的にしたい

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からレイチェルに追加したいと思えば、どうやって別の配列の間を行き来するだろうか?

ありがとうございます。

+0

あなたの質問は明確ではなく、意味のあるコードは表示されません。しかし、私はあなたに 'rootPersons.remove(rachel);が必要だと感じています。 guy.addChild(rachel); ' Javaの命名規則に従ってください:変数は小文字で始まります。 –

答えて

1

多次元リストは必要ありませんが、ツリーです。ツリーの実装については、this questionを参照してください。

多次元リストは、例えばテーブル、直方体などです。次元は最初に知っていなければならず、データの構造を定義します。

ツリーにはルートノードと子があり、実行時にその子が子を多く取得できるため、制限はありません。

4

一人一人が2人の親と子の任意の数を持っている場合は、あなたのような何かを行うことができますビャトキナラインを上に移動したい場合、あなたは

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) { 

} 

ツリーをどのように表示するか考えていくのではなく、その表現方法について考える必要があります。

1

最も簡単な方法は、それぞれのリストがその親を参照することです。 オブジェクトを作成した場合は、次のようになります。

public class Person{ 

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

}