| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Структура хранения данных "дерево", есть ли? |
| Автор: Maksym 15.9.2005, 12:56 |
| Организую ряд объектов в виде дерева, инкапсулируя функциональность дерева в своем классе. От чего бы унаследовать, чтобы главные функции дерева были уже реализованы? В java.util реазизованы некие TreeMap и TreeSet, но это что-то другое, возможностей дерева я у них не обнаружил (напр. получить потомков, предков, обход дерева) Заранее спасибо |
| Автор: 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 структуры лучше дерева? или нужнее? Писать, конечно, дерево можно, не вопрос.. со всеми рекурсивными штуками, которые там напрашиваются. Но думаю что его уже тысячу раз писали до меня Если в sdk нет (что, повторюсь, странно), может быть кто-нибудь знает ссылку где есть? |
| Автор: 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. Надеюсь, это поможет. Удачи |
| Автор: batigoal 15.9.2005, 18:51 |
| Попробуй посмотреть здесь: http://www.theparticle.com/javadata2.html |
| Автор: Maksym 19.9.2005, 11:16 |
| Stampede Lamer George Как и предполагалось - готовые (почти готовые) решения уже есть. Спасибо |
| Автор: 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 никакого отношения не имеет. Тем более что товарищу ответили почти три месяца назад, и он ушел довольный. Это я к тому, что не надо сбивать с толку новичков, которые могут заглянуть в этот топик. |