2012-04-16 3 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 

Так в основном, есть первоначальный ArrayList Джон, Питер, Сандра и Рейчел. Каждый из них имеет свои Arraylist(s). Предположим, я хочу добавить к Рейчел от Гая, как бы я двигался вперед и назад между отдельными массивами ??

Заранее спасибо

+0

Ваш вопрос не ясно, на всех, и вы не показывают значимого кода. Но у меня такое чувство, что вам просто нужно «rootPersons.remove (rachel); guy.addChild (рэчел); '. Пожалуйста, придерживайтесь соглашений об именах Java: переменные начинаются с строчной буквы. –

ответ

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

Самый простой способ состоит в том, чтобы каждый из них имел ссылку на родителя. Может быть, если вы создаете объект Person, похожее на это:

public class Person{ 

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

} 
Смежные вопросы