Know How
Listen von Wortkarten
Um das Spiel programmieren zu können, benötigt man eine Liste, in die man an beliebiger Stelle ein Wort einfügen oder löschen kann. Solch eine Liste kann man ähnlich implementieren, wie Du das vielleicht schon für Warteschlangen oder Stapel gemacht hast. Glücklicherweise müssen wir entsprechende Klassen aber nicht immer selbst programmieren, sondern können einfach entsprechende Klassen benutzen, die uns die benötigte Funktionalität schon fertig bieten.
LinkedList
Java stellt uns viele Klassen zur Verfügung, die wir einfach benutzen können. Eine dieser Klassen hatten wir schon oft benutzt: String
. Eine andere Klasse ist LinkedList
, die genau die Funktionalität, die wir von einer Liste erwarten, schon fertig bereit stellt. Daneben gibt es noch mehrere tausend anderer Klassen. Damit die Vielzahl dieser Klassen geordnet werden können, wurden diese in sogenannten Paketen organisiert. Um eine Klasse benutzen zu können, muss man dann das entsprechende Paket am Anfang des Quellcodes - noch vor der Definition der Klasse - importieren. Um z.B. die Klasse LinkedList
aus dem Paket java.util
benutzen zu können, muss man also im Quellcode schreiben:
Wir gehen in den folgenden Beispielen von einer Klasse Hund
aus:
Innerhalb einer Methode ließe sich dann eine entsprechende Liste z.B. folgendermaßen benutzen:
Generische Klassen
Möchte man auf Methoden der Klasse Hund
zugreifen, erhält man eine Fehlermeldung:
Da man keine Angaben über den Typ der Listenelemente gemacht hat, kann Java nur von der gemeinsamen Oberklasse Object
als Datentyp ausgehen. Objekte der Klasse Object
können aber natürlich nicht bellen.
Um diese Probleme zu vermeiden, kann man in Java generische Klassen (lat.: generalis=allgemein) benutzen. Diese werden auch parametrisierte Klassen genannt, weil zusätzlich zum Klassennamen noch weitere Datentypen - ähnlich wie Parameter einer Methode - angegeben werden.
Bei Objektsammlungen wird dies üblicherweise genutzt, um den Typ der Objekte in der Sammlung zu definieren:
Man darf im Konstruktor den konkreten Typ weglassen, da er ja schon bei der Definition der Variablen angegeben wurde. Gleichwertig zu obigem Code ist also:
Man kann dann alle Methoden wie oben aufrufen, darf über z.B. add
nur Objekte vom Typ Hund
zufügen und erhält bei Aufruf der Methode get
ein Objekt vom Typ Hund
.
Folgende Sequenz lässt sich im Codepad von BlueJ fehlerfrei ausführen:
Listen durchlaufen
Möchte man alle Elemente einer Liste durchlaufen, kann man dies z.B. mit einer for-Schleife tun:
Für solche einfachen Anwendungsfälle kann man alternativ auch die for-each-Schleife benutzen:
Angewandt auf das obige Beispiel also: