![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
hatsumeika |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.5.2005 Где: Минск Репутация: 2 Всего: 2 |
У меня есть иерархическая структура. Она не строго древовидная, у узла может быть несколько супер-узлов. Поэтому при обходе иерархии 1 узел может встречаться несколько раз.
Структура эта implements Iterable. Вот я думаю, будет ли хорошо, если итератор будет возвращать один и тот же элемент несколько раз. Ведь тогда например при 10 элементах цикл может выполнится 12 раз. Кто что думает по этому поводу ? |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Мне кажется, не стоит так делать. По крайней мере, я бы ожидал от итератора, что он вернет мне все по одному разу.
Может, стоит просто создать метод для перебора, и не имплементировать Iterable? -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
hatsumeika |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.5.2005 Где: Минск Репутация: 2 Всего: 2 |
Iterable удобен тем, что его можно красиво использовать в цикле:
|
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Это понятно. Просто от класса, реализующего Iterable, я жду конкретного поведения - последовательного перебора всех элементов без повторов. Конечно, если этот код нужен только тебе, это, наверное, несущественно, но если его будут использовать другие - могут быть непонятки.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
hatsumeika |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.5.2005 Где: Минск Репутация: 2 Всего: 2 |
код является частью API, так что непонятки очень не желательны
|
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Тогда, наверное, стоит пересмотреть механизм перебора, чтобы исключить повторы узлов. Или эти повторы необходимы.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
hatsumeika |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.5.2005 Где: Минск Репутация: 2 Всего: 2 |
в том то и дело, что части использующих алгоритмов необходимы повторы. наверно нужно сделать несколько итераторов, а дефолтный сделать без повторов, например перебирать по-слойно, а не рекурсивно-вглубь-до-упора.
|
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
В принципе, вариант неплохой, но как ты тогда сможешь использовать
? Компилятор ведь не разберется, какой итератор применять. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
hatsumeika |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.5.2005 Где: Минск Репутация: 2 Всего: 2 |
да, тогда придется либо писать цикл по-старому, либо возвращать не Iterator, а List.
|
|||
|
||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 6 Всего: 24 |
hatsumeika а в этом действительно есть смысл? думаю что в размере код выиграет не сильно, но что он многое потеряет в понятности - это наверняка.
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |