Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с деревом, как лучше организовать? 
V
    Опции темы
ElKa
Дата 16.7.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.2.2006

Репутация: 2
Всего: 4



проблема: программа на Java.. дерево состоит из объектов разных классов.. 
надо обрабатывать узлы не от корня вниз, а в сложном порядке, 
например сначала узлы 3-го уровня, потом второго, потом предпоследнего и т.д.

вопрос: как это лучше реализовать?

мои идеи
преобразовать дерево в другую структуру, в которой объекты будут в нужном порядке  ---> в какую?

пробегать дерево несколько раз

использовать несколько классов Visitor

использовать паттерн Builder ----> не знаю как 


PM   Вверх
ivg
Дата 16.7.2008, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



Цитата(ElKa @  16.7.2008,  21:26 Найти цитируемый пост)
преобразовать дерево в другую структуру, в которой объекты будут в нужном порядке  ---> в какую?

например java.util.PriorityQueue
PM MAIL   Вверх
ElKa
Дата 16.7.2008, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.2.2006

Репутация: 2
Всего: 4



Цитата(ivg @  16.7.2008,  19:14 Найти цитируемый пост)
например java.util.PriorityQueue 


в документации такого класса нет 


нашла.. спасибо! сейчас посмотрю


Это сообщение отредактировал(а) ElKa - 16.7.2008, 19:51
PM   Вверх
ivg
Дата 16.7.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



А здесь есть.  smile 
PM MAIL   Вверх
ElKa
Дата 17.7.2008, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.2.2006

Репутация: 2
Всего: 4



PriorityQueue не подходит.. надо что нибудь посложнее.. типа паттерна Строитель
PM   Вверх
Dims
Дата 17.7.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 4
Всего: 11



По-моему, придётся написать свой класс, в котором синхронно хранилось бы и дерево и Vector<Set<Item>>.
PM MAIL   Вверх
ElKa
Дата 17.7.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.2.2006

Репутация: 2
Всего: 4



Dims

а Vector зачем?  smile 
PM   Вверх
Dims
Дата 18.7.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 4
Всего: 11



Цитата(ElKa @  17.7.2008,  20:04 Найти цитируемый пост)
а Vector зачем?

Дерево будет помнить иерархические отношения, а Вектор -- распределение по слоям.
PM MAIL   Вверх
Shurr
Дата 18.7.2008, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 24.10.2006

Репутация: 5
Всего: 7



Цитата(ElKa @ 17.7.2008,  19:04)
а Vector зачем?  smile

В данном случае вектор играет роль индекса. Т.е. он не хранит никакой уникальной информации, все то же самое можно узнать, пробежавшись по дереву. Но использование такого индекса позволяет получить эту информацию (в данном случае - список узлов на определенном уровне) гораздо быстрее. Судя по описанию из первого сообщения - для подобной обработки придется хранить по вектору (кстати, при однопоточной обработке подойдет и List) на каждый уровень дерева.

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

Тогда возможно стоит организовать доступ через обычный Walker. При этом для удобства его интерфейс можно сделать похожим на интерфейс списка (так, например, под интерфейс org.w3c.dom.NodeList обычно подкладывается имплементация в виде walker'a).
PM MAIL   Вверх
ElKa
Дата 19.7.2008, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.2.2006

Репутация: 2
Всего: 4



дерево будет использоваться один раз для генерации кода
никаких поисков по нему не будет  smile 
 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1024 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.