InfoHome | Themen | Projekte | Links | Software |
|
Sortierte Liste für String-ObjekteDie Sortierte Liste ist ein häufig verwendete Variante der einfachen Liste, in der Elemente nach einem festgelegtem Ordnungkriterium an die "richtige" Stelle eingefügt werden. Beispielsweise ließe sich so eine aufsteigend alphabetisch geordnete Liste mit Nachnamen anlegen. Als Speicherstruktur soll eine einfache Liste zum Einsatz kommen, in die der Benutzer aber nur über eine neu zu definierende Methode sl_insert() einfügen kann. Diese Methode muss dafür sorgen, dass an der richtigen Stelle eingefügt wird. Wir realisieren den ADT Sortierte Liste der Einfachheit halber zunächst nur für String-Objekte, können also nur Zeichenketten einspeichern.
public class SortierteListe {
An dieser Klasse ist einiges bemerkenswert: Das Datenfeld l ist vom Typ Liste, wobei Liste ja ein Interface ist. Diese Form der Deklaration legt lediglich fest, dass l von einem Datentyp sein muss, der das Interface Liste implementiert hat. Es bleibt offen, welche Implementation genutzt wird. Im Konstruktor legen wir uns dann auf die ZeigerListe fest, könnten uns aber auch für die ArrayListe entscheiden, wenn wir sie denn programmiert hätten. Innerhalb der Methode sl_insert müssen wir nach der passenden Einfüge-Stelle suchen. Für den lexikographischen Vergleich von zwei Strings wird hier die Methode compareToIgnoreCase genutzt. Diese Methode gehört zur Klasse String und gibt einen ganzzahligen Wert größer Null zurück, wenn dass die Methode aufrufende String-Objekt (hier s) lexikographisch hinter bzw. nach dem als Argument übergebenen String-Objekt einzuordnen ist. Im umgekehrten Fall wird ein Wert kleiner Null, bei Gleichheit Null zurückgegeben. Innerhalb der while-Schleife wird solange vorgerückt, bis man entweder das Ende der Liste erreicht hat oder aber an der richtigen Einfüge-Stelle angekommen ist. Ein kleines Hauptprogramm testet die Sortierte Liste.
public static void main(String[] args) {
Sortierte Liste für ObjekteMitOrdnungUnsere Sortierte Liste arbeitet nun einwandfrei mit String-Objekten. Lieber wäre es uns, wenn sie wie unsere bisherigen ADTs mit beliebigen Objekten arbeiten würde. Wir müssen allerdings verlangen, dass für die verwendeten Objekte eine Ordnungsrelation existiert, da man sie sonst nicht in einer Reihenfolge anordnen kann. Für diese Bedingung formulieren wir ein neues Interface, dass Klassen, deren Objekte in die Sortierte Liste wollen, implementieren müssen. Die Methode compareTo soll einen Größenvergleich zweier in die Liste einzuspeichernder Elemente ermöglichen. (Mit Hilfe der Methode print sollen Objektinformationen auf der Konsole ausgegeben werden.)
public interface ObjektMitOrdnung {
Und jetzt kommt der Clou: Innerhalb der oben geschriebenen Methode sl_insert ersetzen wir String einfach durch ObjektMitOrdnung! Aus compareToIgnoreCase wird die in unserem Interface definierte Methode compareTo. Der Parameter x ist vom Typ ObjektMitOrdnung, also von irgendeinem Datentyp, der das ObjektMitOrdnung Interface implementiert hat. So haben wir sichergestellt, dass das Objekt x auch die Methode compareTo kennt, ohne das wir uns auf einen bestimmten Datentyp festlegen müssen.
public void sl_insert(ObjektMitOrdnung x){
|
© 2004-2024 M. Blanke · Ursulaschule · Kleine Domsfreiheit 11-18 · 49074 Osnabrück |