Java: найти родителей и потомков .... Tree, Loop, ArrayList, List, HashMap, .... что делать? - PullRequest
1 голос
/ 11 ноября 2010

Меня ободрило столько сердечных экспертов по Java, что я осмелюсь сегодня задать еще один вопрос о помощи (все мои вопросы относятся к реальным проектам - и, поскольку я выбрал ярлык для изучения Java, у меня есть большетрудностей, чем при прохождении нормального курса Java) ..

Вот структура данных, которую я хочу достичь (конечный результат должен быть TreeMap с идентификатором в качестве ключа)

id (int)   Characteristic (int)  parent(by id) immediate children (by id)
1           1                    {}            {2,3,4}
2           99                   {1}           {}
3           99                   {1}           {}
4           2                    {1}           {5,6}
5           99                   {2}           {}
6           3                    {2}           {7,8}
7           99                   {3}           {}
8           4                    {3}           {x,xx, ...}
....
....

первые два столбца известны, последние два столбца необходимо получить программно.

Вот правила:

1) элемент с Characteristc, равным 1, является предком и никогда не будет иметь родителя.

2) предметы с характеристикой 99 никогда не будут иметь детей.

3) предметы с характеристиками (2 - 9) могут иметь родителей и детей, а их дети могут иметь детей (которые должны быть больше их)или 99) или нет детей (99).Например, у 2 может быть 99 и 3 как у детей, но у 3 не может быть 2 как у их детей)

спасибо

Ответы [ 2 ]

0 голосов
/ 11 ноября 2010

Возможно, вы объединяете понятия дерева и карты.Карта Java предоставляет интерфейс, который позволяет отображать группу объектов, используя (обычно) объект другого типа в качестве ключа.В вашем случае, похоже, вы будете использовать Longs в качестве ключей.Конкретной картой может быть либо HashMap, либо TreeMap, каждая из которых имеет свои преимущества: поиск HashMap обычно быстрее, но TreeMap имеет преимущество отсортированных ключей.Но вы не можете заставить TreeMap создать определенную структуру дерева.Он сам будет управлять своей формой дерева.Для представления элементов дерева вам понадобится какой-то объект узла дерева, поддерживающий такие операции, как addChild, getChildren, getParent.Если вы строите свое дерево, используя объекты узлов дерева, вы можете легко добавить эти объекты на карту и получить их по идентификатору.

0 голосов
/ 11 ноября 2010

Вы не задаете вопрос Джон.Но вы должны думать об объектной ориентации здесь.Создайте класс примерно так:

Item:
   int id
   int characteristic
   Item parent
   List<Item> children

Вы можете использовать вышеуказанный объект независимо от того, какую структуру данных вы используете.Важно не связывать объекты со структурами данных.Позже вы можете решить, что вам нужна карта или набор деревьев.Теперь все, что вам нужно, это создать набор деревьев со всеми объектами Item.

Ваш вопрос не имеет ничего общего с древовидной структурой, а также с тем, как создать эти объекты, используя чистую ориентацию объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...