2015-06-09 4 views
0

Итак, скажем, у меня есть список людей, которые связаны друг с другом, и каждый из них содержит свое собственное семейное древо.java обновить всех детей в списке

public class Person { 
    private int id; 
    private String name; 
    private List<Integer> ancestorIds; 
    private int parentId; 
    //getters and setters 
} 

так скажем, у меня есть список следующим образом:

List<Person> persons = new ArrayList<Person>(); 
persons.add(new Person(3,"grandpa", {}, null)); 
persons.add(new Person(4,"pa", {3,4},3)); 
persons.add(new Person(5,"uncle", {3,5},3)); 
persons.add(new Person(7,"me", {3,4,7},4)); 

Но теперь мы знаем, что мой дедушка его отец был на самом деле один с идентификатором 1 .. И мне нужно, чтобы обновить список. Как я могу это сделать, имея в виду, что мне нужно обновить его по строке. Итак, сначала мой дедушка .. Затем возьмите список его предков и передайте его моему папу и дяде (добавив также их идентификаторы). и затем я взял список своего папы и добавил меня. Я думаю, для этого мне нужен рекурсивный метод.

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

+0

Вам нужна подходящая структура данных, которая подходит для вашей проблемы (например, [Структура данных дерева] (http://en.wikipedia.org/wiki/Tree_%28data_structure%29)) – mshaaban

+1

Почему у вас нет «Список предков' и ​​'Person parent'. – aioobe

ответ

0

Если вы сделаете изменения в этой структуре данных было бы более гибким, если вы позволите каждой точку человека, чтобы он только прямой предок. А затем постройте дерево по требованию. Как вы упомянули в своем вопросе, я бы использовал, если дерево не изменилось.

0

Вы вынуждены использовать это представление? Было бы больше смысла родословная ссылаться на лиц, в частности, для класса Person должен быть определен как:

public class Person { 
     private int id; 
     private String name; 
     private List<Person> ancestors; 
     private int parentId; 
     //getters and setters 
    } 

Если все сделано таким образом, вам не нужно обновлять ничего, кроме вашего прадед. Фактически, делать это по очереди не является надежным решением, так как есть место для ошибки (если вы пропустите один ID), и вам следует избегать этого, чтобы иметь хороший дизайн. Хуже того, если вы не держите backpointers (т. Е. Имеют потомков, а также предков), нет эффективного способа обновить предков по дереву.

+0

Мне нужно сделать это как в моем примере – user1345883

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