![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
привет. Сразу скажу, что java.util.TreeSet<E> тут не причем
Стоит задача, сформировать дерево такого вида : ![]() Чтобы потом можно было проходить по узлам, в виде такого алгоритма : Первый узел, у тебя есть дочерний Sport, Sport у тебя есть men ? Может есть какие-нибудь примеры такого дерева на Java |
|||
|
||||
| Skipy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 6 Всего: 16 |
А в чем проблема?
|
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
||||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
ну народ, ведь наверняка кто-то деревья на java писал
|
|||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
+1 Ну сделать класс TreeElement с полями TreeElement parent List<TreeElement>children ну и методы hasChild(TreeElement) addChild(TreeElement) etc или проблема в чем-то другом? Или проблема заполнить такое дерево из коллекции? Это сообщение отредактировал(а) Temdegon - 23.11.2010, 22:30 |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
Temdegon, спасибо, а как мне это применить к той "диаграмме" что я в первом посту привел ?
|
|||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Объясни плиз подробно, что тебе надо сделать. Ну ведь явно не нарисовать такую милую картиночку из первого поста? Тебе надо заполнить модель какого-то дерева какими-то данными? или тебе надо эту самую модель дерева сначала сделать? Из каких даных тебе надо сделать древовидную структуру?
Добавлено через 14 минут и 24 секунды Заполнить дерево проще всего рекурсивной функцией. Примерно так:
Надеюсь, смысл понятен |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
мне будет приходить xml, в котором выстроена уже готовая модель отношений родителей и детей. Пример :
Мне необходимо распарсить этот xml и сделать из него дерево (с точно такими же связями) на Java. Т.е. дерево должно состоять просто из String значений. |
|||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Какими средствами распарсить xml я не подскажу, т.к. почти не приходилось с ним работаь. Но думаю сложного ничего в этом нет.
Возьми готовую реализацюи элемента дерева http://download.oracle.com/javase/1.4.2/do...leTreeNode.html или напиши свою. Ну а дальше какие проблемы? Создай корневой элемент и рекурсивно вглубь добавляй дочерние элементы. |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
Temdegon, распарсить xml я могу, я про это и не спрашиваю
я про то, как хранить и в чем. |
|||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Ну прям стригни связать деревцем неполучится никак. Полюбому нужно их заворачивать в класс, который будет содержать ссылки на вложенные элементы.
или юзай http://download.oracle.com/javase/1.4.2/do...leTreeNode.html или как я уже писал
только, естественно, в этом классе должно быть поле для хранения твоего стринга. Чего тебе не хвататет? Сохранения такой структуры? |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
Temdegon, хорошо, спасибо, понял.
А что если мне нужно будет помечать каждый элемент моего дерева, к чему он относится, то это как сделать ? Например, sport - отнести к sport, его дочерний элемент women отнести тоже к sport, и в свою очередь дочерний элемент tenis отнести к games |
|||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Если я правильно понял вопрос, добавь в свой TreeElement дополнительное поле - category и выставляй его. Типа Enum какой-нить или какого-нить своего класса.
Кстати, такая древовидная структура прекрасно мапится хибернейтом и каскадно загружается. тянешь из базы корневой элемент, и хибер сам загрузит всю сруктуру. |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
||||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Почему нелья? можно конечно. только как-то это не кошерно IMHO. Чем тебе не нравится сделать класс Caterogy с полем string categoryName, создать экземпляры для нужных категорий и тыкать ссылки на них в элементы дерева? Ну хотя дело твое, работать-то будет.
|
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
||||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
||||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
сегодня продолжил.
Не понимаю, как использовать этот класс ? Как создать объект parent класса TreeElement из обычного String - Sport ? И еще вопрос. Что значит parent ? это только самый верхний первый элемент ? |
|||
|
||||
| nc30 |
|
|||
|
Интересующийся :) ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 24.6.2010 Где: Санкт-Петербург Репутация: 5 Всего: 8 |
Samotnik, вроде бы есть готовые решения по деревьям, которые здесь уже обсуждались...
Хотя вы это скорее всего уже видели, и я напрасно влезаю в обсуждение |
|||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
поле parent тебе не обязательно. это ссылка на родительский элемент.
String - Sport - это просто дополнительное поле в классе TreeElement. В общем, на примере javax.swing.tree.DefaultMutableTreeNode
Если нужен какой-то дополнительный функционал - расширяй этот класс, или implements MutableTreeNode; |
|||
|
||||
| Samotnik |
|
||||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
Сделал вот так. Вроде все так как и надо. Хочу критики
Добавлено через 9 минут и 42 секунды
Да, я видел, но дело в том, что мне нужно использовать доп поле, т.е. не просто построить дерево, а еще и каждый нод этого дерева помечать значением поле, а в DefaultMutableTreeNode такого не нашел |
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |