2009-10-09 1 views
11

У меня есть LinkedList в Java, итератор для просмотра списка, и я хотел бы клонировать итератор, чтобы сделать временную «просмотр вперед» обработки списка относительно позиции исходного итератора.Клонирование итераторов в Java

Я понимаю, что клонирование итератора невозможно в любой ситуации, но есть ли способ клонировать итератор в LinkedList (или сохранять и восстанавливать его состояние)?

ответ

11

Было бы возможно, но Sun убеждался, что вы не можете (сделав класс закрытым).

Но, возможно, вы можете достичь того, что хотите, используя listIterator() вместо простой iterator(). A ListIterator может перемещаться в обоих направлениях.

+0

Это нормально. Я сохраню количество шагов вперед, а затем вернусь к такому числу шагов, чтобы восстановить состояние. –

1

С помощью ListIterator вы можете сохранить индекс следующего элемента и получить новый ListIterator на основе этого индекса.

Что-то вроде этого (Java 1.5, например):

LinkedList<Integer> list = new LinkedList<Integer>(); 
ListIterator<Integer> lit = list.listIterator(0); 
<<do something here >> 
int index = lit.nextIndex(); 
ListIterator<Integer> litclone = list.listIterator(index); 
+7

Но получение итератора из индекса означало бы просмотр списка с самого начала. Мне кажется очень дорогим способом создания клона того, что по сути является указателем на других языках, таких как C++, со стандартной библиотекой. –

Смежные вопросы