Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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 удобен тем, что его можно красиво использовать в цикле:
|
Автор: 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 | ||
В принципе, вариант неплохой, но как ты тогда сможешь использовать
? Компилятор ведь не разберется, какой итератор применять. |
Автор: hatsumeika 16.5.2005, 13:33 |
да, тогда придется либо писать цикл по-старому, либо возвращать не Iterator, а List. |
Автор: 3,14 17.5.2005, 09:13 |
hatsumeika а в этом действительно есть смысл? думаю что в размере код выиграет не сильно, но что он многое потеряет в понятности - это наверняка. |