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

Java 7 Grundkurs

Collections im Überblick

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Die Java-Standardbibliothek enthält eine Reihe von Klassen für dynamische Datenstrukturen. Lernen Sie diese Collections im Paket "java.util" kennen. Ein Überblick zu den Klassen und Interfaces.
06:52

Transkript

Die Java Standardbibliothek enthält eine Reihe von Klassen für dynamische Datenstrukturen wie Listen oder Mengen. Diese Collections genannten, Klassen befinden sich in dem Paket Java.util. Die Basis ist ein Interface namens Collection, also Sammlung. Dieses Interface definiert Methoden, die Collections-Klassen anbieten müssen. Wir haben hier die Methoden Add und Remove zum Hinzufügen bzw. Entfernen von Elementen. Diese Elemente können beliebige Objekte sein, aber müssen Objekte sein. Primitive Datentypen kommen hier nicht in Frage. Sie können aber auf die Wrapper-Klassen zurückgreifen, die es für jeden primitiven Datentyp gibt. Bei dem Hinzufügen und Entfernen von Elementen, passen sich die Collections-Klassen in ihrer Größe an und über Size kann die aktuelle Größe in Erfahrung gebracht werden. Is Empty ist einfach eine Kurzform für Size=0 und mit Contains kann ich herausfinden, ob eine Collection ein bestimmtes Objekt bereits enthält. Jede Collections-Klasse muss eine Methode Iterator anbieten, die einen Iterator zurückliefert. Man kann sich alle Elemente geben lassen, die in der Collection enthalten sind, ohne zu wissen, was es denn für eine Collection-Klasse ist, also eine Liste oder eine Menge oder etwas ganz anderes. Von diesem Basis-Interface ist ein weiteres Interface abgeleitet: Das Interface List. Das spezielle an der Liste ist, dass sie eine Reihenfolge für Elemente vorhält. Es werden ein paar Methoden definiert, die dem Rechnung tragen. Mit Get und Set kann ich mir ein Element an einer bestimmten Stelle geben lassen bzw. ein Element an eine bestimmte Stelle setzen. Über Index off kann ich erfahren, an welcher Stelle sich ein bestimmtes Element befindet und ein List Iterator ermöglicht mir von vorne nach hinten durch die Liste zu iterieren, und auch von hinten nach vorne. Ein Interface beschreibt eine geforderte Schnittstelle, damit ich etwas tun kann, damit ich Objekte erzeugen kann, brauche ich konkrete Klassen. Für das Interface List gibt es gleich mehrere Implementierungen, zwei davon sind: ArrayList und LinkedList. Die Klasse ArrayList basiert, wie der Name andeutet, intern auf einem Array. Arrays sind ja in der Größe fix. D.h., wenn ich immer weiter Elemente hinzufüge, sind sie irgendwann voll. Möchte ich weitere Elemente hinzufügen, müsste ich mir ein größeres Array anlegen, die alten Elemente hineinkopieren, dann könnte ich das größere Array weiterverwenden. Um diese Details kümmert sich die ArrayList, so dass ich, wenn ich die ArrayList verwende, einfach weiter Elemente hineinwerfen kann und wenn das darunterliegende Array voll sein sollte, erzeugt sie automatisch ein Größeres, kopiert die Elemente in das Größere hinein und verwendet dann dieses. Das Zugreifen auf ein Element geht mit einem bestimmten Index bei der ArrayList sehr fix, wohingegen das Einfügen durchaus ab und zu einen Moment dauern kann, wenn gerade das darunterliegende Array voll war und ein neues angelegt werden muss. Das ist der Grund für verschiedene Implementierungen des Interfaces List, sie haben alle ihre Vorteile und Nachteile. Je nachdem welche Ansprüche ich habe, wähle ich die eine Implementierung oder die andere. Die andere könnte z.B. die LinkedList sein, eine doppelt verkettete Liste. Jedes Element in der Liste hält eine Referenz auf seinen Vorgänger und seinen Nachfolger. Die Elemente sind wie an einer Kette aufgereiht. Das Einfügen funktioniert schnell und zwar an einer beliebigen Stelle, es müssen nur Referenzen umgehängt werden. Was länger dauern kann, ist der Zugriff auf ein Element über seinen Index, die LinkedList muss sich vom ersten Element aus bis zu dem gewünschten Element durchhangeln, bzw. wenn sich das Element in der zweiten Hälfte befinden sollte, vom Ende aus, von hinten nach vorne. Je nach Größe der Liste und Position des gewünschten Elementes, kann das also eine Weile dauern. Die passende Klasse hängt von Ihren Anforderungen ab und wenn Sie keine passende Klasse finden, ist es Ihnen auch freigestellt, eine eigene Implementierung des Interfaces List zu bauen. Neben List gibt es eine zweite Spezialisierung des Interfaces Collection, nämlich das Interface Set. In einem Set haben die Elemente keine bestimmte Reihenfolge, aber im Gegensatz zur Liste, kann jedes Element im Set nur ein einziges Mal drinnen sein. In eine Liste kann ich das Element beliebig oft einfügen, die Liste wächst dann entsprechend, bei Set kümmert sich selbsttätig darum, dass nach einem ersten, erfolgreichen Einfüge-Versuch alle weiteren nicht mehr zu einer Veränderung des Sets führen. Das Interface Set definiert keine eigenen, sondern lediglich eine neue Bedeutung, die implementierenden Klassen müssen sich an diese Bedeutung halten. Eine Implementierung von Set stellt z.B. die Klasse HashSet dar. Sie bietet Methoden an, die in Collection definiert sind und kümmert sich, dass die Set-Bedeutung eingehalten wird. Eine Spezialform des Sets ist das SortedSet, wiederum ein Interface. Eine Implementierung ist die Klasse TreeSet und kümmert sich, dass alle Elemente in einer sortierten Reihenfolge vorgehalten werden. Wenn ich z.B. Strings in mein TreeSet einfüge, dann werden diese alphabetisch sortiert. Bei den genannten Klassen und Interfaces ging es immer darum, eine Menge von einzelnen, unabhängigen Objekten zu verwalten, die man in diese Strukturen hineinwerfen konnte. Möchte man Paare aus einem Schlüssel und einem Wert verwalten, dann kommt man hier nicht weiter. Für solche Fälle gibt es ein separates Interface und das heißt Map. Dieses Interface ist keine Erweiterung des Basis-Interfaces Collection, da die dort definierten Methoden hier wenig sinnvoll sind. Es werden Methoden definiert, die für die Verwaltung von KeyValue Paaren geeignet sind. Man kann sich eine Map als eine Tabelle mit zwei Spalten vorstellen. Die erste Spalte enthält Schlüssel und über die diese kann ich auf die Werte in der zweiten Spalte zugreifen. mit Put lässt sich bspw. ein solches Paar hinzufügen, Get erwartet einen Key, einen Schlüssel und gibt den entsprechenden Wert zurück. Remove entfernt einen Eintrag, die Methode Entry Set gibt mir eine Menge aller Paare zurück, die Methode Key Set alle Keys, also nur die erste Spalte der Tabelle quasi. Size, klar, liefert mir die Größe der Map zurück, also die Anzahl aller Einträge und Is Empty ist wieder eine Kurzform für Size = 0. Für dieses Interface gibt es diverse Implementierungen. Eine der Ältesten ist die Klasse Hashtable, ist schon seit Java 1.0 dabei und ist damit älter als das gesamte Collections-API, das nämlich erst mit Java 1.2 hinzugefügt wurde. Hashtable wurde also im Nachhinein in diese Struktur eingebaut. Beachten Sie das kleine t, hier hat sich Sun nicht an die eigene Namenskonvention gehalten. Die Unterklasse Properties ist eine Spezialform einer Map, in der sowohl Keys als auch Values Strings sind. Die modernere und performantere Form der Map ist die HashMap. Sie verwaltet die enthaltenen Elemente über ihren Hash-Code und hat eine Unterklasse namens LinkedHashMap, die ihre Einträge wieder über eine doppelt verkettete Liste verwaltet. Es gibt auch für die Map eine sortierte Variante, die zuerst mal wieder in einem Interface definiert wird, nämlich SortedMap und die implementierende Klasse hierfür heißt dann TreeMap. Ich habe also eine Menge von Schlüssel/Wert-Paaren, die nach ihren Schlüssel sortiert wird. Eine Beschreibung aller Klassen und Schnittstellen finden Sie natürlich in der API-Doc und am Ende dieser Beschreibungstexte steht dann jeweils immer ein Link zum Java Collections Framework, wie es hier genannt wird, hier findet sich ein Link zu einem ausführlichen Tutorial, das sich mit allen Klassen und Interfaces detailliert beschäftigt. Sie haben nun einen ersten Überblick über die Collections bekommen und Sie haben gesehen welche Klassen und Interfaces zur Verfügung gestellt werden.

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!