2012-04-16 4 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로부터 Rachel에 추가하고 싶다고 가정한다면, 분리 된 배열 사이를 어떻게 앞뒤로 움직일 수 있을까 ??

미리 감사드립니다.

+0

질문의 의미가 명확하지 않으며 의미있는 코드가 표시되지 않을 수 있습니다. 하지만 나는 단지'rootPersons.remove (rachel);이 필요하다는 느낌이 들었다. guy.addChild (rachel);'. Java 명명 규칙을 따르십시오. 변수는 소문자로 시작합니다. –

답변

1

다차원 목록이 아니라 트리가 필요합니다. 트리 구현에 대해서는 this question을 참조하십시오.

다차원 목록은 테이블, 직육면체 등입니다. 차원은 처음에 알려 져야하며 데이터 구조를 정의합니다.

나무는 루트 노드와 하위 노드를 가지며 런타임에 더 많은 하위 노드를 가질 수 있으므로 제한이 없습니다.

4

각 사람이 부모와 자녀의 수를 가지고 있다면 당신은 당신이 좋아하는 일을 할 수있는 MATERAL 라인을 이동하려는 경우, 당신은

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 

}