# Kann mir jemand kurz die Vorteile des Iterators erklaeren..?



## sirbender (5. Nov 2009)

Irgendwie finde ich Iterator beim Handling umstaendlicher als z.B. ueber den Index einer Collection per Loop zu iterieren.

Kann mir jemand erklaeren warum immer noch Iterators verwendet werden? Hat es irgendwelche Vorteile die mir gerade nicht auffallen?

Ist es schneller?


----------



## Gast (5. Nov 2009)

Was ist an:
for(String s : stringList) { s.o.p(s); }
umständlich?

Wenn man keinen Index braucht, wieso dann einen Index nutzen?


----------



## bygones (5. Nov 2009)

ich vermute mal er meinte

```
Iterator<String> iterator = stringList.iterator();
while (iterator.hasNext()) {
   String s = iterator.next();
}
```


----------



## sirbender (5. Nov 2009)

Gast hat gesagt.:


> Was ist an:
> for(String s : stringList) { s.o.p(s); }
> umständlich?
> 
> Wenn man keinen Index braucht, wieso dann einen Index nutzen?



Nehmen wir an, du benutzt ueberall Iteratoren und spaeter wird klar, dass du auch einen Index braeuchtest in einigen Faellen. Bei einer List hast du die Moeglichkeit dann auch Indices zum Iterieren zu nutzen.

Wie gesagt, ich versuche nur zu verstehen wo eher Iteratoren genutzt werden sollten, und wo die Vorteile liegen? Oder gibt es gar keine? Kann man waehrend dem Iterieren vielleicht Elemente entfernen ohne Nebeneffekte?

Irgendeinen Vorteil muss es doch geben, ansonsten haette man doch gar nicht diese Redundanz.

Mit Iteratoren meinte ich Iterator.


----------



## SlaterB (5. Nov 2009)

Iteratoen kann man auch bei Sets verwenden, wo es nicht direkt Indexe gibt,

und in einer (schlecht cachenden) LinkedList beginnt jede Suche per Index beim 0ten Element,
wenn du da die Elemente 1.000.017-1.000.032 mit Index aufrufst dauert allein das schon ne Weile,
während ein (gut implementierter) Iterator blitzschnell zum nächsten Element springt, 
übrigens gar schneller als der Index-Zugriff im Array/ ArrayList


----------



## sirbender (5. Nov 2009)

SlaterB hat gesagt.:


> Iteratoen kann man auch bei Sets verwenden, wo es nicht direkt Indexe gibt,
> 
> und in einer (schlecht cachenden) LinkedList beginnt jede Suche per Index beim 0ten Element,
> wenn du da die Elemente 1.000.017-1.000.032 mit Index aufrufst dauert allein das schon ne Weile,
> ...



Ah, ok. Ist eine Frage der Performance. Ich verstehe zwar nicht warum vor allem die Iteration ueber ein Array per Index laenger dauern soll aber ich glaub dir mal.

Was meintest du mit Suche per Index in LinkedLists? Wie laeuft die Suche ab und warum gibt es ueberhaupt eine Suche? Reicht der Index nicht aus um direkt den Speicherbereich anzuspringen?


----------



## SlaterB (5. Nov 2009)

> Ich verstehe zwar nicht warum vor allem die Iteration ueber ein Array per Index laenger dauern soll aber ich glaub dir mal.
gemeint war: Iterator über LinkedList ist schneller als Indexzugriff über Array

-----

verkettete Liste kannst du im Internet nachschlagen,
da hat man in der Grundstellung nur Links auf das erste und vielleicht letzte Element, der Rest ergibt sich per Durchlaufen,

'Index -> Speicherbereich anspringen' ist quasi die Definition eines Array, also das Gegenteil einer verketteten Liste


----------



## sirbender (5. Nov 2009)

SlaterB hat gesagt.:


> > Ich verstehe zwar nicht warum vor allem die Iteration ueber ein Array per Index laenger dauern soll aber ich glaub dir mal.
> gemeint war: Iterator über LinkedList ist schneller als Indexzugriff über Array
> 
> -----
> ...



Also per Index ueber eine LinkedList zu iterieren ist Performance-Selbstmord? Sollte man dann nicht gleich eine ArrayList benutzen, oder verpass ich grade was? Im neuen foreach Loop wird nehme ich mal ein Iterator benutzt.

Jedenfalls danke fuer die Antworten. Ich behalte das Performance-Argument im Hinterkopf.


----------



## SlaterB (5. Nov 2009)

immer alles aus dem Vorpost zu zitieren ist Mord,

bei kleinen LinkedLists merkt man das iterieren nicht,

bei ArrayList hat man dagegen beim Einfügen das Problem, 
wenn in in einer 1 Mio.-Liste ein Element in der Mitte dazukommt, müssen 500.000 verschoben werden, LinkedList hat damit dagegen keine Probleme,
die freie Verlinkung erlaubt beliebige Umbauten,

alles hat Vor- und Nachteile,


----------

