| 

.NET C# Java Javascript Exception

5
Ist es möglich beim Durchlaufen einer While-Schleife über eine ArrayListe mit dem Standard Iterator (liste.iterator()) den aktuellen Zeiger Index auf die aktuelle Position zu bekommen.

In der While (iterator.hasNext()) Schleife will ich per list.sublist(int,int) das Ende der Liste abschneiden, wenn eine Zwischenbedingung erfüllt ist. Nur die sublist Methode nimmt keinen Iterator an und der Standard List Iterator bietet keinen getIndex().

Also bleibt mir doch nur einen eigenen Iterator zu programmieren oder

int pos =arrayList.indexof(object) Funktion zu verwenden.

Gibt es noch eine weitere Möglichkeit, dem Iterator sein Geheimnis zu entlocken?
News:
30.01.2012
mobidat 63 1 7
Danke - das klingt plausibel für eine LinkedList. da springt der Iterator von Knoten zu Knoten. Aber hinter einer ArrayList steckt ein dynamisches Array. Da sollte der Iterator eigentlich schon wissen wo er gerade ist, oder? Kann auch sen, dass ich mich irre...
mobidat 30.01.2012
2 Antworten
3
Was spricht gegen einen eigenen Iterator-Wrapper?

public class IndexedIterator<T> implements Iterator<T> {
private final Iterator<T> it;
private int index = 0;
public IndexedIterator(Iterator<T> it) {
this.it = it;
}
public boolean hasNext() { return it.hasNext(); }
public T next() { index++; return it.next(); }
public void remove() { it.remove(); }
public int getIndex() { return index; }
}


Natürlich darf man dann den "inneren" Iterator nicht benutzen.
05.02.2012
eSCALAtion Blog 176 4
Das ist eine akzeptable Lösung! Vielen Dank. Der Index wird aufgepfropft und bei Gelgenheit abgerufen. Die Performance dürfte aber sich nicht groß von einer komplett neu programmierten Iterator Klasse unterscheiden, oder?
mobidat 05.02.2012
Der Vorteil dieser Lösung ist, dass man damit beliebige Iteratorn wrappen kann. Der Aufwand, eine spezielle Implementierung für Listen zu schreiben, wäre etwa genauso groß. Der einzige Vorteil eines speziellen Wrappers für Listen wäre, das man dann gleich ListIterator implementieren könnte.
Landei 06.02.2012
0
Moin mobidat,

das geht meines Wissens nach nicht. Durch die Verwendung eines Iterators wird ja die Implementierung unabhängig - du bekommst immer das nächste Element. Das muss aber nicht in der Reihe liegen (Binärbaum). Ich lasse mich da aber gerne belehren!

Es gibt jedoch noch den Listiterator<E> der dir Previos und Next liefert. Dein Cursor also immer dazwischen ist.

Gruß Karl
30.01.2012
Karl 958 8
Danke - das klingt plausibel für eine LinkedList. da springt der Iterator von Knoten zu Knoten. Aber hinter einer ArrayList steckt ein dynamisches Array. Da sollte der Iterator eigentlich schon wissen wo er gerade ist, oder? Kann auch sen, dass ich mich irre...
mobidat 30.01.2012
Dir bleibt wahrscheinlich nichts anders übrig, als deinen eigene Iterator zu schreiben.
Karl 31.01.2012

Stelle deine Java-Frage jetzt!