Java Iterator ArrayList

...komplette Frage anzeigen

1 Antwort

b hat doch einen Wert. Schau mal, was a.iterator() macht. Und danach schau mal, was Iterator.next() macht.

Dann sollte das geklärt sein.

Wichtig ist, du kannst die Werte nicht manipulieren, sondern nur iterieren. Und im gegensatz zu einer schleife, kann es keine outofbounds exception geben, weshalb sich das anbietet, wenn du nur werte ausgeben musst :)

a.iterator() erzeugt mir ja einen iterator.

Iterator.next() gibt mir das nächste element der iteration zurück. aber warum wird dann nicht immer nur das erste element ausgedruckt und das in einer entlosschleife? woher weis der iterator, das er ein element schon "durch hatte" ?

0
@tuyjoe

der ist so programmiert :) das ist intern ein Zeiger auf die Datenstruktur, der auf das jetzige oder halt nächste element zeigt. Weiß nicht, wie die das realisieren. Das hat dich aber nicht zu kümmern in Java, weil es so etwas wie in C mit Zeigerarithmetik nicht gibt.

Das ist ja das gute, dass du von der Abstraktionsebene nicht mehr bis zur CPU runter musst, sondern eine Funktion aufrufst, die genau das macht, was sie soll.

Schau mal, ob du mit der IDE (zB Eclipse) auf den Code zugreifen kannst :) Im Debugger oder so, dann siehst du das Rechenschritt für Rechenschritt

1
@BrutalNormal

danke, ich hab mir das schon mit dem debugger angeschaut, sobald b.next gedruckt wurde, erhöht sich der "curser" des iterators um eins. mir war nur nicht klar, warum er sich automatisch um eins erhöht. ich habe gedacht man muss das selbst implementieren! =) danke für deine antwort

0
@tuyjoe

bedeutet:

iterator.next(); gibt das nächste element zurück UND erhöht den Iterator um eins.

0
@tuyjoe

genau :)

und wenn hasNext() kein Element mehr hat, worauf es zeigt, ist es false und

while(b.hasNext()) ist dadurch false und springst somit raus aus der while schleife

0
@JavaTheHutt

ich habe dort reingeschaut, mir wurde aber nicht deutlich, das sich der Iterator durch diese Methode "verändert". ich habe gedacht es würde immer nur das nächste Element zurückgegeben. Und da ich dachte der Iterator ändert seinen zustand nicht, hatte ich erwartet, dass es immer das selbe Element bleibt. danke für deine ergänzung!

0

Was möchtest Du wissen?