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


Автор: hatsumeika 14.5.2005, 18:21
У меня есть иерархическая структура. Она не строго древовидная, у узла может быть несколько супер-узлов. Поэтому при обходе иерархии 1 узел может встречаться несколько раз.

Структура эта implements Iterable. Вот я думаю, будет ли хорошо, если итератор будет возвращать один и тот же элемент несколько раз. Ведь тогда например при 10 элементах цикл может выполнится 12 раз.
Кто что думает по этому поводу ?

Автор: batigoal 14.5.2005, 19:13
Мне кажется, не стоит так делать. По крайней мере, я бы ожидал от итератора, что он вернет мне все по одному разу.
Может, стоит просто создать метод для перебора, и не имплементировать Iterable?

Автор: hatsumeika 14.5.2005, 19:20
Iterable удобен тем, что его можно красиво использовать в цикле:

Код

for(Element elem : hierarchy){

}

Автор: batigoal 14.5.2005, 19:30
Это понятно. Просто от класса, реализующего Iterable, я жду конкретного поведения - последовательного перебора всех элементов без повторов. Конечно, если этот код нужен только тебе, это, наверное, несущественно, но если его будут использовать другие - могут быть непонятки.

Автор: hatsumeika 14.5.2005, 21:44
код является частью API, так что непонятки очень не желательны

Автор: batigoal 14.5.2005, 21:49
Тогда, наверное, стоит пересмотреть механизм перебора, чтобы исключить повторы узлов. Или эти повторы необходимы.

Автор: hatsumeika 14.5.2005, 21:57
в том то и дело, что части использующих алгоритмов необходимы повторы. наверно нужно сделать несколько итераторов, а дефолтный сделать без повторов, например перебирать по-слойно, а не рекурсивно-вглубь-до-упора.

Автор: batigoal 15.5.2005, 13:27
В принципе, вариант неплохой, но как ты тогда сможешь использовать
Код

for(Element elem : hierarchy)

?

Компилятор ведь не разберется, какой итератор применять.

Автор: hatsumeika 16.5.2005, 13:33
да, тогда придется либо писать цикл по-старому, либо возвращать не Iterator, а List.

Автор: 3,14 17.5.2005, 09:13
hatsumeika а в этом действительно есть смысл? думаю что в размере код выиграет не сильно, но что он многое потеряет в понятности - это наверняка.

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