Java Iterator und Listen - Zusammenarbeit?

FrazeColder

Lt. Commander
Dabei seit
Okt. 2013
Beiträge
1.589
Hey Community,

Ich haben letztens den Iterator kennengelernt und musste auch einmal die Methoden hasNext() und next() selber schreiben.
In der letzten Stunde haben wir was über Listen erzählt bekommen.

Da ich mich schon mal vertraut machen möchte mit der Liste und dem Zusammenspiel von dem Iterator und der Liste, ist meine Frage jetzt, wie kann ich den Iterator jetzt in den Code der Liste mit einbinden?

Ich weiß das ich mit dem Iterator durch Daten iterieren kann. Allerdings weiß ich nicht, wie ich den jetzt einbauen könnte...

MfG und Danke
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.023

FrazeColder

Lt. Commander
Ersteller dieses Themas
Dabei seit
Okt. 2013
Beiträge
1.589
Und hat jemand Zufällig irgendwo ein UML zu umsetzten einer List?
Was ist den der Unterschied zwischen einer List und einer LinkedList?

Wenn ich das google, dann komm nur "Was ist der Unterscheid zwischen einer ArrayList und einer List"
 

mental.dIseASe

Lt. Junior Grade
Dabei seit
Dez. 2008
Beiträge
469
Die Liste ist ein Konzept, in Java "Interface", die LinkedList eine Implementierung davon. Das Interface beschreibt, was Klassen können müssen, die sich List schimpfen wollen, also eine Implementierung davon sein wollen. Für die List ist das zum Beispiel die Möglichkeit, Elemente hinzuzufügen, zu entfernen oder auf die einzelnen Elemente per Index zugreifen zu können.
 

NemesisFS

Lt. Commander
Dabei seit
Sep. 2008
Beiträge
1.289
Eine List ist laut Doku:
An ordered collection (also known as a sequence).
Eine Collection ist einfach nur eine Menge an Elementen. Eine Liste konkretisiert das weiter, weil eine Collection keine Reihenfolge hat, du also nicht das Element an der zweiten Position abfragen kannst. Eine weitere Konkretisierung (Subinterface) ist Set. Das hat keine Reihenfolge, erlaubt aber keine doppelten Elemente.

Das sind aber alles nur Interfaces, das heißt sie definieren eine Menge an Methoden (und was die machen sollen) die implementiert werden müssen damit die Klasse dieses Interface erfüllt, also als dieses verwendet werden kann.
Die Implementierungen für eine List sind dann beispielsweise eine LinkedList. In dieser haben die Elemente jeweils einen Verweis (Pointer) auf das nächste und das vorherige Element. Eine andere ist die ArrayList, dabei liegen die Elemente in einem Array das durch ein größeres ersetzt wird falls es zu voll ist.
Die Implementierungen bestimmen dann die Kosten für bestimmte Operationen, beispielsweise braucht ein list.get(i) bei einer LinkedList O(n), bei einer ArrayList geht das in konstanter Laufzeit O(1).

Es ist wichtig für den richtigen Zweck die richtige Implementierung auszuwählen (zB häufiger Zugriff auf bestimmte Indizes -> ArrayList). Die Interfaces erlauben aber, Funktionen unabhängig von der Implementierung zu schreiben, sodass zum Beispiel sort für alle Listen andwendbar ist. Du kannst auch deine eigene Liste schreiben und die wird mit allen Funktionen funktionieren die eine List (oder eine Collection) erwarten.

Zu deiner Iterator frage: Normalerweise implementiert man den Iterator als innere Klasse der iterierbaren Klasse (Iterable ist btw das Superinterface von Collection). Im Fall der Liste gibt es aber den ListIterator der dank des Interfaces mit allen Listen funktioniert.

Ich kann dir empfehlen dir mal die verlinkte Doku anzuschauen, in der Beschreibung stehen da genau die Eigenheiten der einzelnen Interfaces/Klassen. Das Konzept der Interfaces (das ist nur der Java-Name) ist zentral für Objektorientierung, es erlaubt dir Funktionalität von Implementierung zu trennen.

Edit: Eine List selbst zu schreiben ist vielleicht eine gute Übung, man muss dazu aber eine Menge Methoden implementieren. UML brauchst du dazu nicht, geh einfach die Liste der Methoden durch und lass deine Klasse List implementieren.
 
Zuletzt bearbeitet:

NemesisFS

Lt. Commander
Dabei seit
Sep. 2008
Beiträge
1.289
Ah, das hab ich übersehen.
Heute habe ich gelernt, dass Vector und HashTable die threadsicheren Varianten von ArrayList und HashMap sind :).
 
Top