2016-04-23 11 views
0

Wie setze ich einen Iterator auf sein erstes Element zurück?Wie setze ich den Iterator in Java zurück?

Unten habe ich einen Sigma Iterator. Wie setze ich den Iterator auf sein erstes Element zurück, wenn die Schleife while abgeschlossen ist?

+0

Ich denke, du solltest nicht. Um es zurückzusetzen, rufen Sie einfach einen neuen Iterator aus der zugrunde liegenden Datenstruktur ab. 'Iterator' ist eine Schnittstelle, die nur 3 Methoden zur Verfügung stellt,' hasNext', 'next' und' remove'. –

+0

Hey Jungs, Sie lösen das Problem wirklich nicht, indem Sie einen neuen Iterator von der zugrunde liegenden Datenstruktur anfordern, Sie entgehen nur dem Problem in diesem Fall, was passieren würde, wenn die zugrundeliegende Datenstruktur seit dem letzten Mal geändert wurde Iterator? –

+0

und OP, warum müssen Sie den Iterator zurücksetzen? nochmal darüber iterieren ?? mach einfach, was du im Single Loop machen willst, warum es über 2 Loops aufgeteilt wird ?? –

Antwort

0

Ich habe nicht viel Arbeit mit Iteratoren gemacht, aber ich schätze, Sie könnten den Iterator in seinen ursprünglichen Zustand versetzen.

Iterator it = Sigma.iterator(); 

while(it.hasNext()){ 
    letter= (String) it.next(); 
    System.out.println(letter); 
} 

it = Sigma.iterator(); 
+2

Das setzt Iterator nicht auf seinen ursprünglichen Zustand, der einen neuen Iterator von Sigma anfordert, wenn die Sigma-Werte nicht seinen okey ändern, aber was hat sich schon geändert? (neue Werte hinzugefügt oder entfernt von Sigma), erhalten Sie neue Iterator mit verschiedenen Werten. –

+0

@LaVloZMerrill Das ist ein sehr guter Punkt. Ich nehme an, die einzige Lösung wäre, zu Beginn eine tiefe Kopie von Sigma zu erstellen und diese dann für die Iteration zu verwenden. –

+0

@RayondKelly Es gibt viele Lösungen für dieses Problem, Sie können einen rücksetzbaren Iterator erstellen, der einen Iterator akzeptiert. Dieser rücksetzbare Iterator iteriert zunächst den bereitgestellten Iterator, wobei jede Objekteration einem internen Array und dann beim Zurücksetzen den Index zu der erste (ein ineffizienter Weg), ein anderer einfacher Weg, einfach sicherzustellen, dass die zugrunde liegende Datenstruktur nicht ändert, im Falle der Sammlung können Sie dieses Verhalten durch dekorieren die Klasse durch Collections.unmodiableXXX Methoden erzwingen, natürlich können andere Lösungen existieren:) –

1

Sie müssen es nicht zurücksetzen und können dies nicht tun. Sammlungen sind nicht wie eine Kassette, die Sie zurückspulen müssen. Sie können den alten Iterator einfach verwerfen.

Jedes Mal, wenn Sie erneut Sigma.iterator() aufrufen, wird ein neuer Iterator zurückgegeben, der am Anfang der Sammlung mit der Iteration beginnt.