2009-10-09 17 views
11

Mam listę LinkedList w języku Java, iterator do przeglądania listy i chciałbym sklonować iterator, aby wykonać tymczasowe przetwarzanie listy w odniesieniu do pozycji oryginalnego iteratora.Klonowanie iteratorów w Javie

Rozumiem, że klonowanie iteratora nie jest możliwe w każdej sytuacji, ale czy istnieje sposób sklonowania iteratora do listy odnośników (lub zapisania i przywrócenia jej stanu)?

Odpowiedz

11

Byłoby to możliwe, ale Sun upewnił się, że nie można (przez uczynienie klasy prywatnej).

Ale może uda się osiągnąć to, co chcesz, używając listIterator() zamiast zwykłego iterator(). A ListIterator może poruszać się w obu kierunkach.

+0

To ok. Oszczędzę liczbę kroków, a następnie cofnę tyle kroków, aby przywrócić stan. –

1

Dzięki ListIterator można przechowywać indeks następnego elementu i można uzyskać nowy ListIterator na podstawie tego indeksu.

Coś jak ten (Java 1.5 przykładzie):

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

Jednak pobranie iteratora z indeksu oznaczałoby odświeżenie listy od początku. Wydaje mi się, że jest to bardzo drogi sposób na stworzenie klonu, który jest zasadniczo wskaźnikiem w innych językach, takich jak C++ z biblioteką standardową. –