Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Java Grundkurs 3: Generische Programmierung, Datenströme, Datumsrechnung

Datenreihen sortieren

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
In diesem Video lernen Sie, wie man die Elemente einer Liste mit der Methode sort() aus der Klasse Collections sortiert. Die Voraussetzung dafür ist, dass die Klasse der zu sortierenden Elemente das Interface Comparable implementiert.

Transkript

Java bietet zwei besondere Klassen mit dem Namen Collections und Arrays an, in denen zahlreichen Convenient Methods enthalten sind. In diesem Video werde ich Ihnen hiervon die Methode Sort in der Klasse Collections vorstellen. Die Sort Methode sortiert die Datenreihe einer Collection, verlangt hierfür aber, dass die Objekte in der Datenreihe miteinander verglichen werden können. Dies bedeutet, dass Ihre Klasse vom Interface Comparable abgeleitet ist. Fangen wir also an. Ich wechsle in die Klasse Katze und leite sie vom Interface Comparable ab. implements und dann Comparable Strg + Leertaste und hier gleich das Erste. Da klicke ich doppelt drauf und jetzt sehen Sie, dass das Interface Comparable ein Typ-Parameter enthält. Das heißt wir müssen den Typ-Parameter parametrisieren. Und jetzt setze ich die Katze für die Parametrisierung ein. Also Katze und erfordert das Interface Comparable, dass ich seine abstrakte Methode CompareTo implementiere. Deshalb lasse ich mir von Eclipse helfen und erzeuge die Methode Compare To Add unimplemented methods. Hier klicken Sie drauf und jetzt sollte uns hier unten eine Methode erzeugt worden sein, die CompareTo heißt. genau, und das ist auch richtig, so. Jetzt sehen Sie, was uns Eclipse vorgebaut hat. Innerhalb der Methode CompareTo wird das aktuelle Objekt This mit einem anderen Objekt, das als Übergabe-Parameter übergeben wird verglichen. Wenn das Objekt in der Liste höher positioniert werden soll, als das übergebene, so muss die Methode CompareTo eine positive Ganzzahl liefern. Und wenn die Position des Objekts unterhalb des übergebenen liegt, dann muss der Rückgabewert eine negative Ganzzahl sein. Eine null steht für gleich positioniert. Ich muss mir also Gedanken machen, nach welchen Kriterien meine Klasse sortiert werden soll und wann ich eine positive oder negative Zahl liefere. In unserem Fall bietet sich die Sortierung nach dem Namen an. Und zwar muss der Name je nach Position im Alphabet, die Position in der Liste bestimmt. Um die beiden Katzen noch etwas besser voneinander unterscheiden zu können, benenne ich das Objekt um und zwar zu andereKatze. Und nun muss ich also die Namen der beiden Katzen mit einander vergleiche. Deshalb besorge ich mir die Variable Name der anderenKatze über ihre Methode Get Name. Und zwar hier oben als allererstes andereKatze.getName() Das liefert mir ja ihren Name und den Rückgabewert der Methode getName weise ich eine neue Variable mit dem Namen andererName zu. Also String andererName = andereKatze.getName. Und nun muss ich die Objektvariable Name mit den Variablen andererNamen vergleichen. Da es sich um zwei Zeichenketten handelt, müsste ich hierfür ja normalerweise durch die Zeichenketten Zeichen für Zeichen durchprobieren, um die jeweils höhere Position des Namens in einem aufwändigen Algorithmus zu ermitteln. Das brauche ich nicht, denn die Klasse String hat das Interface Comparable bereits implementiert und in einer eigenen Methode CompareTo eine sinnvolle Implementierung für das Vergleichen von Zeichenketten bereits vorgenommen. Und da mir hierdurch die Methode CompareTo der Klasse String bereits die richtige Ganzzahl liefert, reiche ich diese einfach als Rückgabewert der Methode CompareTo bei der Katze weiter. Also rufe ich hier, hinter dem Schlüsselwort return, einfach nur die Methode compareTo bei der Objekt Variablen name auf und vergleiche sie mit andererName. Ich übergebe also andererName an die Methode compareTo und bin dann mit meiner eigenen Methode compareTo in der Klasse Katze fertig. Eines fehlt noch. In der Spezifikation wird auch noch gefordert, dass man auf etwas achten muss. Und zwar ist es so, dass zwei Objekte, die die compareTo Methode als gleiche positioniert und die die Methode Equals nicht als gleich ansieht, dass sich dies ja wiederspricht. Und dies sollte dann in einem Kommentar angemerkt werden Der Grund hierfür ist, dass die Ordnungsrichtlinie, die wir mit dem Interface Comparable anbringen, als sogenannte Art eigene Reihenfolge gesehen wird. Der englische Fachausdruck hierfür lautet Natural Ordering. Um einen solchen Kommentar nicht anfügen zu müssen, können wir die Methode Equals natürlich auch überschreiben und zwei Objekte mit gleichen Namen als gleiches Objekt determinieren. Das würde bedeutet, dass wir fachlich festlegen, dass jede Katze einen eindeutigen Namen hat. Das ist etwas weiter hergeholt, aber es geht hierbei darum, dass Sie das Interface Comparable und die Bedeutung des Natural Orderings verstehen. Also werde ich die Equals Methode anbringen und dies wird natürlich nach sich ziehen, dass ich die Hash Code Methode auch noch überschreiben muss. Aber ich gehe diesen Weg. Also bemühe ich Eclipse mit dieser Aufgabe. Ich gehe ins Hauptmenü auf Soruce, dann auf Generate hashcode() and equals() und hier sehen Sie nun, dass ich die Möglichkeit habe Eigenschafts-Felder auszuwählen, die darüber entscheiden, wann eine Katze mit einer anderen Katze als gleichgesehen werden kann, also wann eine Katze eindeutig ist. Denn hier steht Select the fields to include in the hashCode() and equals() methods. Und ja, messung passt jetzt nicht. Wir wollen aber, dass zwei gleiche Katzen, die den gleichen namen haben eben als gleich angesehen werden. Also lasse ich die Checkbox bei name stehen und klicke dann auf OK. Sound jetzt sehen Sie hier unten, dass zwei Namen, die gleich sind, dass die dann auch true sind, beziehungsweise wenn die ungleich sind, dass dann die Equals Methode false ergibt und somit brauche ich auch keinen Kommentar hinzuschreiben, denn compareTo und bietet mir sinngemäß das Gleiche, wenn es sich um gleiche Katzen handelt. Die ganze Sache haben wir nur durchgeführt, damit wir die Datenreihen von Katzen sortieren können, also gehe ich jetzt in die Klasse App hinein und dort werde ich nun eine Liste von Katzen erstellen und diese nach ihrem Namen sortieren. So nun kann es losgehen. Ich brauche zunächst mal eine Objektvariable vom Typ List. Also private List Java Util List ist richtig und den Typ Parameter parametrisiere ich mit der Klasse Katze und die Objektvariable nenne ich katzen. Und dann initialisiere ich die Objektvariable mit der Klasse ArrayList. So und hier unten füge ich dann der Katzen mehrere Katzen hinzu. So, hierbei nutze ich dann die Methode add und werde innerhalb der runden Klammern für die Übergabeparameter einfach den Konstruktor aufrufen, new Katze und zwar den Konstruktor, der eine Messung und einen Namen entgegennimmt. Erst folgt ja der Name, der erste Katze nenne ich Pinki und dann folgt eine Messung new Messung und Pinki ist 0,51 m groß und 6,1 Kg schwer. Die Klasse Messung muss ich dann auch noch importieren und jetzt kopiere ich die komplette Zeile vier mal, sodass ich fünfmal eine Katze hinzufüge zu der Liste. Die zweite Katze nenne ich Flo, die ist nur 0,5 m groß, wiegt 5,0, die dritte Katze oder vielmehr ist das hier Kater Kajimbo, der ist 0,6 m groß und wiegt 8,5 und noch ein Kater, Fifone, 0,66 ist der groß und wiegt 7,2 und schließlich füge ich auch noch die Lilli hinzu. Die ist bloß 0,40 groß, wiegt aber ganze sportliche 10,5. So und ganz zuletzt wollen wir die Katzen sortiert nach Namen ausgeben. Das schreibe ich mal als Kommentar rein. Gebe die Katzen sortiert nach Namen aus. So und jetzt gäbe es über die Methode Collections.Sort folgende Möglichkeit. Collections.sort, der übergebe ich einfach die Variable katzen und dann kann ich durch iterieren, durch die Katzen und gebe dann die jeweilige temporäre Variable katze aus. Und das schauen wir uns mal an und hier sehen Sie jetzt, dass die Katzen alphabetisch angeordnet ausgegeben werden. Und somit haben Sie in diesem Video gelernt, wie man die Elemente einer Liste mit der Methode Sort der Klasse Collections sortiert. Die Voraussetzung hierfür war, dass die Klasse der zu sortierenden Elemente das Interface Comparable implementiert. In der Methode compareTo der Klasse Katze haben wir anschließend die Sortierung vorgenommen. Außerdem habe ich Ihnen erklärt, dass wir hiermit auch das sogenannte Natural Ordering der Klasse Katze festgelegt haben. Die Spezifikation erwartet, dass die Anordnung des Natural Orderings auch in den Methoden Equals und hashCodes berücksichtigt wird. Deshalb haben wir diese Methoden ebenso überschrieben.

Java Grundkurs 3: Generische Programmierung, Datenströme, Datumsrechnung

Steigen Sie tiefer in die Java-Programierung ein und lernen Sie den Umgang mit generischen Typen, Lamda-Ausdrücken, DAtenströmen und mit Datums- und Zeitberechnung.

5 Std. 24 min (47 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:09.10.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!