Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Java 7 Grundkurs

Collections verwenden

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
In diesem Film erfahren Sie nun, wie die wichtigsten Collections-Klassen funktionieren und wie sie verwendet werden können. Hilfreich sind dabei auch die Java-API-Dokumentation zu diesen Klassen und die Beschreibung der Interfaces.
08:36

Transkript

In diesem Video zeige ich Ihnen, wie die wichtigsten Collections-Klassen funktionieren und wie Sie sie verwenden können. Die Funktionalität dieser Klassen wird vorgegeben durch das Basis-Interface "Collection" und die beiden Unter-Interfaces "List" und "Set". Das Interface "List" beschreibt dabei eine Liste, deren Elemente eine feste Reihenfolge haben und über ihren Index angesprochen werden können. Duplikate sind erlaubt, das heißt, ich kann ein Objekt auch mehrfach in eine Liste einfügen. Das Interface "Set" beschreibt nun eine Menge, bei der die Elemente keine spezielle Reihenfolge haben und Duplikate sind hier nicht erlaubt. Versuche ich trotzdem, ein Objekt mehrfach einzufügen, dann wird der erste Einfügevorgang erfolgreich sein und die folgenden werden einfach keine Veränderungen mehr am Set vornehmen. Schauen wir uns nun einmal ein Beispiel für die Verwendung eines solchen Sets an. Ich beginne dazu mit einem leeren Projekt. Ich habe hier lediglich eine Klasse, die Klasse "CollectionsDemo", und darin befindet sich eine leere Main-Methode. Beginnen wir mit dem Erzeugen eines Sets und verwenden dazu die Klasse "HashSet". Ich deklariere mir eine Referenzvariable vom Typ "Set" und nenne sie "Dinge". Wenn es mir bei der Referenzvariablen primär um die Methoden geht, die ich aufrufen kann, also um die Schnittstelle und nicht so sehr um die konkrete Implementierung, dann verwende ich als Typ für diese Referenzvariable eben auch das Interface. Das Interface "Set" befindet sich, wie auch alle anderen Bestandteile des Collections AP im Package "java.util", es ist also ein passender Import notwendig. Das können wir machen, indem wir hier auf das Lämpchen klicken und "@Import" auswählen. Unsere Variable ist da, erzeugen wir uns das "HashSet", "new HashSet()", und jetzt fügen wir hier ein paar Dinge hinzu. Dazu verwenden wir die Methode "add", und wir sehen, "add" kann ich ein beliebiges Object übergeben, z. B. ein String, noch ein String, ein String, der aussieht wie eine Zahl. Und ich kann natürlich auch eine richtige Zahl in mein Set hineinpacken. Allerdings kann ein Set, wie alle anderen Collections-Klassen auch, nur Objekte vorhalten. Ein primitives, einfaches "int" reicht dort also nicht, ich brauche ein Integer-Objekt. Das würde dann also so aussehen. Ist ein bisschen umständlich, und ich habe das auch nur gemacht, um Ihnen zu zeigen, dass eben wirklich nur Objekte dort hinein können. Denn dank Autoboxing können wir hier so tun, als würden wir tatsächlich eine einfache Zahl hineinwerfen. Der Compiler erkennt jetzt: "Das ist ja ein primitives 'int'." Aber wir bräuchten ja ein Integer-Objekt, also erzeugt der Compiler automatisch den Code, den ich eben gerade eingetippt hatte. Also auch wenn ich hier einfach nur eine 5 hinschreibe, wird trotzdem ein Integer-Objekt erzeugt und in das Set hineingepackt. Um nun auch noch die spezielle Set-Funktionalität zu testen, fügen wir jetzt noch einen Tisch hinzu. Wir hatten ja gesagt, eigentlich darf kein Element zweimal hineinkommen. Schauen wir einmal, was passiert, und packen wir auch noch eine 5 hinein. So, jetzt könnten wir durch das Set durchiterieren, mit einer erweiterten Vorschleife, und uns die einzelnen Elemente anzeigen lassen. Aber bei den Collections-Klassen ist auch die "toString"-Methode adäquat überschrieben, so dass wir vereinfacht "System.out.println" verwenden können und hier einfach das Set ausgeben lassen können. Wenn "println" ein Objekt bekommt, ruft es von diesem Objekt die "toString"-Methode auf, "toString" vom "HashSet" wiederum zeigt uns hübsch formatiert die einzelnen Elemente der Reihe nach an. So, dann speichern wir das einmal, führen es aus, ja. Das ist meine Main-Class, beim ersten Mal muss ich das ja noch bestätigen, und wir sehen, in dem Set ist drin: Eine "5", eine "3.14", ein "Stuhl" und ein "Tisch". Man kann hier die beiden wesentlichen Eigenschaften eines Sets sehr gut sehen. Erstens: Es gibt keine spezielle Reihenfolge. Die Objekte sind offensichtlich in einer anderen Reihenfolge dort drinnen, als ich sie reingepackt habe. Und, zum Zweiten: Jedes Element ist auch wirklich nur einmal vertreten, egal wie oft ich es hineinfüge. Nun machen wir das Gleiche mit einer Liste. Dazu muss ich eigentlich nur die erste Zeile ändern. Auf der linken Seite mache ich aus "Set" "List", und auf der rechten Seite mache ich aus "HashSet" "ArrayList". Und dann muss ich natürlich noch die beiden Imports hinzufügen lassen: Ein Import für "ArrayList" und ein Import für "List". Achten Sie darauf, dass Sie List aus java.util verwenden, es gibt auch ein List in java.awt, das ist aber etwas völlig anderes. Schauen wir noch mal kurz auf unsere Grafik: Wir sehen ja hier, sowohl "List", als auch "Set" sind Unter-Interfaces von "Collection" und alle Methoden, die in "Collection" definiert sind, müssen also sowohl von Listen, als auch von Set-Implementierungen geliefert werden. Deshalb muss ich auch im übrigen Quelltext nichts ändern, weil ich nur diese Methoden aus "Collection" verwendet habe bisher. So, jetzt führen wir das geänderte Programm aus, und jetzt sehen wir zwei Änderungen. Erstens: Die Objekte sind wirklich genau in der Reihenfolge drin, in der wir sie hineingepackt haben. Das heißt, die Liste hält tatsächlich eine Reihenfolge vor. Und das Zweite ist: Objekte können auch mehrfach auftauchen. Ich habe also hier vorne einen Tisch und da hinten noch einen, und hier habe ich die 5, und dort habe ich noch eine 5. Schließlich schauen wir uns noch ein Beispiel für das Interface "Map" an. "Maps" sind quasi so etwas wie Tabellen mit zwei Spalten. In der ersten Spalte befindet sich ein Schlüssel, und in der zweiten Spalte befindet sich ein Wert. Die Elemente der ersten Spalte kann man also quasi als Index verstehen, über die dann auf die Elemente der zweiten Spalte zugegriffen werden kann. Da wir es hier also nicht mit einzelnen unabhängigen Elementen zu tun haben, sondern immer mit Paaren von Elementen, ist "Map" auch kein Unter-Interface des Basis-Interfaces "Collection", wird aber insgesamt trotzdem zu den Collections dazugezählt. Auch hier gibt es wieder verschiedene implementierende Klassen, wir schauen uns einmal ein Beispiel mit einer "HashMap" an. Hier reicht es jetzt nicht, die erste Zeile zu ändern, denn die Methoden heißen ja auch alle ganz anders. Ich nehme das einmal alles komplett heraus, Strg+E, für "erase", und jetzt erzeugen wir uns erst mal eine "Map". Auf der linken Seite wieder den Interface-Typ verwenden und auf der rechten Seite die Klasse, in diesem Fall nehmen wir die "HashMap". Wie gesagt, "Map" muss ich noch importieren, das kann ich durch den Klick auf das Lämpchen erledigen, ein Import, genau. Jetzt werfen wir einmal ein paar Sachen in diese "Map" hinein, z. B. ein paar Dinge, ein paar Produkte, auf die ich über ihre Produkt-ID, über ihre Seriennummer, ihre Teilenummer, zugreifen möchte. Los geht es. Die Methode dafür heißt "put". Und "put" möchte zwei Werte haben, wir sehen das hier: Ein "key" und ein "value", also ein Paar von Dingen, die ich dort reinpacke. So, als "key" nehme ich einmal ein String "ABC123" und als value unseren "Tisch", so. Dann füge ich noch eine zweite Sache hinzu mit einem anderen "key": "987ZYX" und hier einen "Stuhl", das sollte reichen. Da ich über einen gegebenen "key" eindeutig auf einen ganz bestimmten "value" zugreifen können muss, darf natürlich jeder key nur einmal vorhanden sein. Das heißt, in der ersten Spalte unserer Tabelle darf kein Eintrag zweimal vorkommen. Jetzt probiere ich einfach mal genau das. Kann Ihnen schon sagen: Es gibt keinen Compiler-Fehler, das ist vollkommen zulässig. Ich verwende den ersten "key" noch mal und gebe dort jetzt aber ein anderes Produkt an. Und es passiert jetzt Folgendes: Der vorhandene Eintrag wird überschrieben. Ich ersetze jetzt also den Eintrag "Tisch" durch den Eintrag "Banane". Geben wir diese ganze "Map" jetzt aus, um zu sehen, was jetzt drinnen ist. Auch hier können wir einfach unser Objekt direkt an die "println"-Methode übergeben, "Ausführen", und wir sehen, über den ersten Index haben wir tatsächlich die Banane drin und über den zweiten Index den Stuhl. Hauptsächlich benötigt man solche "Maps" natürlich, um über den "key" auf "values" zugreifen zu können. Das sieht dann folgendermaßen aus: Ich rücke einmal ein Stück hoch. Ich kann mir aus "Dinge" per "get" unter Angabe eines "keys" "ZYX" den passenden "value" geben lassen. "Get" gibt mir dann den "value" zurück. Den kann ich mir in einer Variablen merken, dazu gibt es hier dieses Lämpchen, ich bin einmal tippfaul. Ich habe die Möglichkeit, mir den Rückgabewert zu einer neuen Variablen hinzufügen zu lassen. Ich nenne die jetzt einfach nicht "get", ich nenne sie "Ding". Und wie wir hier sehr gut sehen können, auch wenn ich das Ganze als String hineingeworfen habe, so bekomme ich von "get" doch immer ein Object zurück. Möchte ich es aber als String weiter benutzen können, dann muss ich hier auch den Typ auf "String" ändern und einen entsprechenden Type-Cast hinzufügen, damit der Compiler glücklich ist. Geben wir dieses Ding aus, so, "Ausführen", und wir sehen, über diesen Index bekommen wir tatsächlich einen "Stuhl". Es gibt natürlich noch viel mehr Methoden. Schauen Sie sich die Javadoc an zu den Klassen. Schauen Sie in die Beschreibung der Interfaces hinein. Dort stehen alle Methoden drin, die es so gibt und was Sie tun können. Hier haben Sie nun einen ersten Überblick bekommen, wie Sie mit Collections-Klassen arbeiten können, wie Sie dort Dinge hineinwerfen können und auch wieder herausholen.

Java 7 Grundkurs

Machen Sie sich mit den Grundlagen der Java-Programmierung vertraut und lernen Sie die Syntax der Sprache sowie das Konzept der objektorientierten Softwareentwicklung kennen.

8 Std. 32 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

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!