Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Структура хранения данных "дерево", есть ли?


Автор: Maksym 15.9.2005, 12:56
Организую ряд объектов в виде дерева, инкапсулируя функциональность дерева в своем классе.
От чего бы унаследовать, чтобы главные функции дерева были уже реализованы? smile

В java.util реазизованы некие TreeMap и TreeSet, но это что-то другое, возможностей дерева я у них не обнаружил (напр. получить потомков, предков, обход дерева)

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

Автор: batigoal 15.9.2005, 13:12
Наверняка есть сторонние библиотеки с этими функциями. Надо поискать.

А какая именно функциональность нужна? И в чем заключается задача? (Просто, может, есть другой путь)

Автор: AntonSaburov 15.9.2005, 15:20
Надо посмотреть DOM - там же как раз все это есть. И сразу если что можно XML получить.

Автор: 3,14 15.9.2005, 16:53
А можно XSD схему дерева набросать, воспользоваться JAXB, и получить библиотеку для работы с деревьями подходящими под данное описание, но всё, конечно, зависит от задачи

Автор: LSD 15.9.2005, 16:58
Не думаю что DOM и JAXB подойдут т.к. они только представляют информацию в виде дерева.
А обход дерева, получение высоты дерева, балансировка и т.д. в них не реализованны и это опять реализовать руками.

Автор: Maksym 15.9.2005, 17:35
AntonSaburov
что есть DOM? сори за непонятливость

Lamer George
не знаю где искать
Задача с виду проста.
Есть объект, назовем его TreeNode. Со своими полями и методами доступа к ним. Совокупность этих объектов по логике вещей представляет собой дерево произвольной глубины вложенности и количества потомков каждого из узлов.
Нужен грамотный объект Tree, в который можно было бы удобно добавить узлы произвольным образом, а потом это дерево обойти и распечатать (по принципу дерева каталогов) хотя бы имена всех узлов с отображением глубины вложенности...
Хотелось бы простыми методами это дерево редактировать, менять порядок узлов и т.п.
Зная мощь Java в подобных вопросах - просто поражен тем, что на поверхности ни одного готового решения. Ну чем, скажите, стек, очередь, вектор, свойства и другие реализованные в sdk структуры лучше дерева? или нужнее?
Писать, конечно, дерево можно, не вопрос.. со всеми рекурсивными штуками, которые там напрашиваются. Но думаю что его уже тысячу раз писали до меня smile
Если в sdk нет (что, повторюсь, странно), может быть кто-нибудь знает ссылку где есть? smile)


Автор: Stampede 15.9.2005, 18:25
Maksym, для твоих целей вполне может сгодиться TreeNode, который является ключевым понятием в модели данных TreeModel для визуального компонента JTree.

Сам по себе TreeNode - это интерфейс. К нему есть раширенный интерфейс, MutableTreeNode, который дополнительно предусматривает возможность добавления, удаления и модификации узлов.

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

Примеры работы с "деревянными" структурами можно найти в туториале Sun http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html.

Надеюсь, это поможет. Удачи smile

Автор: batigoal 15.9.2005, 18:51
Попробуй посмотреть здесь:
http://www.theparticle.com/javadata2.html

Автор: Maksym 19.9.2005, 11:16
Stampede
Lamer George
Как и предполагалось - готовые (почти готовые) решения уже есть. Спасибо smile DefaultMutableTreeNode все решает

Автор: Wowa 8.12.2005, 21:07
TreeSet
http://java.sun.com/j2se/1.4.2/docs/api/java/util/TreeSet.html

и тут http://www.galileocomputing.de/openbook/javainsel4/javainsel_11_007.htm#Rxx365java11007040003921F0371BC
правда на немецком.

Автор: Wowa 8.12.2005, 21:25
http://computerbooks.ru/books/Programming/Book-Java/Glava6/Index35.htm

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

Порядок задается либо естественным следованием элементов, либо объектом, реализующим интерфейс сравнения Comparator .

Этот класс удобен при поиске элемента во множестве, например, для проверки, обладает ли какой-либо элемент свойством, определяющим множество.

В классе TreeSet четыре конструктора:

TreeSet () — создает пустой объект с естественным порядком элементов;

TreeSet (Comparator с) — создает пустой объект, в котором порядок задается объектом сравнения с;

TreeSet (Collection coll) — создает объект, содержащий все элементы коллекции coll , с естественным порядком ее элементов;

TreeSet (SortedMap sf) — создает объект, содержащий все элементы отображения sf , в том же порядке

Автор: Stampede 8.12.2005, 22:33
Wowa, человек немного про другое спрашивал. TreeSet - это просто реализация упорядоченного множества (интерфейс SortedSet) то есть такого, в котором можно хранить объекты с возможностью быстрого поиска по (сравнительному) значению поля, для которого задан компаратор данного множества.

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

Это я к тому, что не надо сбивать с толку новичков, которые могут заглянуть в этот топик.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)