2009-10-09 21 views
11

Tengo una LinkedList en Java, un iterador para explorar la lista y me gustaría clonar el iterador para hacer un procesamiento temporal de la lista "con anticipación" con respecto a la posición del iterador original.Iteradores de clonación en Java

Entiendo que la clonación de un iterador no es posible en todas las situaciones, pero ¿hay alguna forma de clonar un iterador en una LinkedList (o guardar y restaurar su estado)?

Respuesta

11

Sería posible, pero Sun se aseguró de que no pueda (haciendo que la clase sea privada).

Pero tal vez puede lograr lo que quiere con un listIterator() en lugar de un simple iterator(). Un ListIterator puede moverse en ambas direcciones.

+0

eso está bien. Guardaré el número de pasos por delante y luego retrocederé esa cantidad de pasos para restaurar el estado. –

1

Con el ListIterator puede almacenar el índice del siguiente elemento, y puede obtener un nuevo ListIterator basado en ese índice.

Algo como esto (Java 1.5 ejemplo):

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

Pero obtener un iterador del índice significa volver a explorar la lista desde el principio. Me parece una forma muy costosa de producir un clon de lo que es, esencialmente, un puntero en otros lenguajes como C++ con la biblioteca estándar. –