Überblick über Listen in Java (und andere Collections)

Im Stoff der 11. Klasse sind Listen Thema, genauer: einfach verkettete Listen. Die Klassen und Methoden dazu erstellen die Schüler in liebevoller Handarbeit selber, und das ist auch sinnvoll, weil sie dann wissen, wie solche Listen prinzipiell funktionieren.

Aber natürlich bringt die Programmiersprache Java bereits verschiedene Listen-Klassen mit, die wichtigsten sind Vector, ArrayList, LinkedList. Die letzte davon ist der Schülerliste recht nahe. Man kann schnell neue Elemente zu einer LinkedList hinzufügen oder welche entfernen, dafür dauert es etwas länger, das – sagen wir – zwölfte Element der Liste herauszusuchen. Bei den anderen beiden Klassen geht das effektiver, dafür dauert das Einfügen und Entfernen länger. (Warum das so ist, weiß ein Schüler nach der 11. Klasse, warum das wichtig ist, nach der 12.)

Im Programmierprojekt der elften Klassen – ich werde noch davon erzählen – sollen die Schüler auch solche Listen verwenden, laut Lehrplankommentar die selbst angefertigten. Das haben wir uns geschenkt, stattdessen habe ich den Schülern gezeigt, wie die entsprechenden Java-Klassen funktionieren, und die Schüler haben damit gearbeitet.

Als Überblick für die Schüler und gleichzeitig als ein Einblick in den Aufbau von Java habe ich diese Grafik erstellt:

Schön sieht man die Zusammenhänge zwischen Vererbung, Schnittstellen (rot) und abstrakten Klassen (grün). ArrayList, Vector und LinkedList erben manche Methoden von der abstrakten Oberklasse AbstractList (die wiederum von AbstractCollection erbt), angesprochen werden können die Listenklassen über die gemeinsame Schnittstelle List.
Die Klasse LinkedList kann dabei auch über das Interface Queue angesprochen werden, ebenso wie die Klasse PriorityQueue, obwohl beide von ganz anderen Klassen abstammen.

Erstellt habe ich die Grafik mit dem offenen UML-Editor StarUML. Hier ist die Quelldatei dafür, falls jemand an der Grafik weiterbasteln möchte.

Fußnote: Alle Listen in Java implementieren die Schnittstelle Collection, ebenso wie Mengen und Warteschlangen. Alle Collections, aber nicht nur die, implementieren ihrerseits die Schnittstelle Iterable – das heißt, sie sind jeweils ein Haufen von Elementen, die man der Reihe nach durchgehen kann. Das geht zum Beispiel mit der eleganten for-each-Schleife:

for (Listenelement l : liste) {
  l.aktionAusfuehren();
}

Man liest sie so: Für jedes Element l in der Sammlung namens liste, tue Folgendes: lass l eine bestimmte Methode ausführen.
Vielleicht ist das auch was für die Schüler der 10. Klasse, die mit Arrays und Zählschleifen große Probleme haben.

Tagged: Tags

3 Thoughts to “Überblick über Listen in Java (und andere Collections)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.