Kleine Frage zu Iterator und Iterable

Overskill

Aktives Mitglied
Hey Leute habe mich gerade etwas zu dem Thema im Titel belesen. Wenn ich das jetzt richtig vestanden habe wird das beides doch bei Datenstrukturen verwendet. Wieso sollte man das aber bei einer Liste verwenden? Da gibt es doch schon eine Ordnung? Wenn man es bei einer Map benutzt, wo es mehr oder weniger keine feste Ordnung gibt verstehe ich das aber wieso auch bei ArrayList(s) oder LinkedList(s)

mfg Over
 
Ein Iterator sorgt für weitergehende Abstraktion. Wenn eine Methode einen Iterator erwartet, kannst du einen Iterator zu AbstractCollection, AbstractList, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayBlockingQueue, ArrayDeque, ArrayList, AttributeList, BeanContextServicesSupport, BeanContextSupport, ConcurrentLinkedDeque, ConcurrentLinkedQueue, ConcurrentSkipListSet, CopyOnWriteArrayList, CopyOnWriteArraySet, DelayQueue, EnumSet, HashSet, JobStateReasons, LinkedBlockingDeque, LinkedBlockingQueue, LinkedHashSet, LinkedList, LinkedTransferQueue, PriorityBlockingQueue, PriorityQueue, RoleList, RoleUnresolvedList, Stack, SynchronousQueue, TreeSet und Vector übergeben. Das ist dann vollkommen egal, welche Struktur dahinter steht.

Außerdem kann das Iterieren definiert, also die Art festgelegt werden, was aber eher zweitrangig ist.
 
Zuletzt bearbeitet:
Okay, aber ist ein Iterator bei einer ArrayList, LinkedList ... weitgehend überflüssig? Immerhin soll der Iterator ja für "Ordnung sorgen". Und da gibt es doch schon eine?

mfg
 
Ist er nicht, gerade weil es egal sein kann, ob der Iterator auf eine List oder einen Baum etc zugreift.

Und er bietet eine andere Möglichkeit um über Datenstrukturen zu iterieren

[Java]
Iterator it = collection.iterator();

for (Object ob = it.next(); it.hasNext(); ){
System.out.println(obj);
}
[/code]
ist dasselbe, wie
Java:
for (Object obj : collection){
  System.out.println(obj);
}
oder auch
Java:
for (int i = 0; i < collection.size(); i++){
  System.out.println(collection.get(i));
}
, wobei die ersten zwei Möglichkeiten sogar vom entstehenden Bytecode identisch sind.


Der Iterator soll eigentlich nicht für Ordnung sorgen, sondern nur eine elegante Art und Weise mit der man über die Datenstrukturen iterieren kann bieten.

Infos gibt es auch hier und hier.
 
Zuletzt bearbeitet:
Zur Richtigstellung:

Java:
for(Object o : collection) {
  System.out.println(o);
}

ist das gleich wie:

Java:
for(Iterator iter = collection.iterator(); iter.hasNext(); ) {
  System.out.println(iter.next());
}
 

Zurück
Oben