Java Iterator und Listen - Zusammenarbeit?

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.718
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
 
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"
 
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.
 
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 schrieb:
Lässt die Performance aber so weit ich das gesehen habe außen vor.
Gut formuliert. So weit Du gesehen hast
Such mal auf dem Sheet nach Performance, slow oder Fast

Gruß
Andy
 
Ah, das hab ich übersehen.
Heute habe ich gelernt, dass Vector und HashTable die threadsicheren Varianten von ArrayList und HashMap sind :).
 
Die man nicht mehr nutzen sollte, weil es mittlerweile bessere Alternativen gibt ;)
 
Zurück
Oben