Inhaltsverzeichnis
Collections
Das Collections-Framework bietet Klassen zum Speichern von Listen, Maps (Schlüssel-Wert-Speicher), Sets (Mengen) und Stacks (Stapelspeichern). Mit Hilfe von Generics kann man den Datentyp der zu speichernden Objekte bei der Deklaration der Collection angeben, so dass man die Daten ohne Casten gleich mit dem richtigen Datentyp zurückerhält, z.B.
ArrayList<String> liste = new ArrayList<>(); // <String> bedeutet: Diese ArrayList speichert Objekte der Klasse String. liste.add("Test"); String t = liste.get(0);
Man kann alle Collections-Klassen aber auch ohne Generic-Syntax nutzen, muss dann beim Entnehmen der Objekte aber auf den korrekten Datentyp casten, z.B.
ArrayList liste = new ArrayList(); // Diese Liste speichert beliebige Objekte liste.add("Test"); String t = <String>liste.get(0);
ArrayList
ArrayLists sind Listen, bei denen man in konstanter Zeit auf das i-te Element lesend zugreifen kann. Dafür ist das Speichern von Werten manchmal etwas langsamer.
Im „Inneren“ haben ArrayList
Objekte ein Array, das etwas größer dimensioniert ist als die Anzahl der in der ArrayList
enthaltenen Elemente. Ist das Array voll, dann wird ein deutlich größeres Array reserviert, und anschließend werden die Elemente vom alten in das neue Array kopiert. Das alte Array wird danach verworfen.
Der Vorteil von ArrayLists gegenüber Arrays besteht darin, dass Anfangs keine Maximalgröße festgelegt werden muss. Dafür brauchen die ArrayLists etwas mehr Speicher als Arrays und sind etwas langsamer.
Methoden:
add(element)
fügt am Ende der Liste ein Element hinzuget(index)
gibt das index-te Element zurück. Das erste Element hat den Index 0.add(index, element)
fügt das Element an der Stelleindex
in die Liste ein und verschiebt alle nachfolgenden Elemente nach hinten.size()
gibt die Anzahl der Elemente in der Liste zurückremove(element)
entfernt - falls vorhanden - das Element aus der Liste.remove(index)
entfernt das Element mit dem angegebenen Index aus der Listeclear()
entfernt alle Elemente aus der Liste.contains(element)
gibt genau danntrue
zurück, wenn die Liste das Element enthält.indexOf(element)
: Falls das Element in der Liste enthalten ist, wird der Index des Elements zurückgegeben, ansonsten -1.addAll(liste)
fügt der Liste alle Elemente der übergebenen Liste hinzu. Letztere wird dabei nicht verändert.
Vereinfachte for-Wiederholung
HashMap
Hashmaps verwendet man, um Schlüssel-Wert-Paare zu speichern. Sie können bei Angabe des Schlüssels den passenden Wert finden und zurückgeben.
- Die Methode put(schlüssel, wert) speichert ein Schlüssel-Wert-Paar
- Die Methode get(schlüssel) liefert den zum Schlüssel gehörenden Wert zurück.
Wird zu einem in der HashMap
schon vorhandenen Schlüssel erneut ein Schlüssel-Wert-Paar mit identischem Schlüssel gespeichert, so überschreibt es das zuvor gespeicherte Schlüssel-Wert-Paar.
Methoden:
put(key, value)
speichert das Schlüssel-Wert-Paar in derHashMap
. Existiert zum übergebenen Schlüssel schon ein Paar in derHashMap
, so wird es mit dem neuen Paar überschrieben.get(key)
gibt den zum Schlüssel gehörigen Wert zurück. Falls es in derHashMap
zum übergebenen Schlüssel keinen Wert gibt, dann wirdnull
zurückgegeben.size()
gibt die Anzahl der gespeicherten Schlüssel-Wert-Paare zurück.clear()
löscht alle Schlüssel-Wert-Paare aus derHashMap
.isEmpty()
gibt genau danntrue
zurück, wenn dieHashMap
keine Schlüssel-Wert-Paare enthält.containsKey(key)
gibt genau danntrue
zurück, wenn zum übergebenen Schlüssel ein Schlüssel-Wert-Paar gespeichert ist.containsValue(value)
gibt genau danntrue
zurück, wenn in derHashMap
ein Schlüssel-Wert-Paar mit dem übergebenen Wert gespeichert ist.
HashSet
HashSets bilden Mengen aus der Mathematik nach. Wie diese können sie Elemente speichern, jedoch jedes höchstens ein Mal.
Methoden:
add(element)
fügt demHashSet
das Element hinzu.addAll(hashSet)
fügt demHashSet
jedes Element des übergebenen HashSets hinzu. Letzteres wird dabei nicht verändert.contains(element)
gibt genau danntrue
zurück, wenn sich das Element imHashSet
befindet.isEmpty()
gibt genau danntrue
zurück, wenn dasHashSet
keine Elemente enthält.remove(element)
entfernt das Element - falls vorhanden - aus demHashSet
.clear()
entfernt alle Elemente aus demHashSet
.size()
gibt die Anzahl der Elemente imHashSet
zurück.
Stack
Ein Stack
(deutsch: „Stapelspeicher“ oder „Kellerspeicher“, siehe auch hier) ist eine Datenstruktur, die sich wie ein Stapel Papier verhält: Man kann beliebig viele Elemente mit der Methode push
„auf den Stack legen“, wobei das letzte immer „zuoberst“ zum Liegen kommt. Nimmt man die Elemente mit der Methode pop
wieder „vom Stack herunter“, so erhält man sie in umgekehrter
Reihenfolge zurück, d.h. immer das oberste zuerst.
Methoden:
push(element)
fügt ein Element „oben“ auf dem Stack hinzupop()
nimmt das oberste Element vom Stack und gibt es zurückpeek()
gibt das oberste Element zurück, belässt es aber auf dem Stacksize()
gibt die Anzahl der Elemente auf dem Stack zurückclear()
nimmt alle Elemente vom Stack herunterisEmpty()
gibt genau danntrue
zurück, wenn kein Element auf dem Stack liegtadd(element)
bewirkt dasselbe wiepush
remove(element)
entfernt - falls vorhanden - das Element aus dem Stack.contains(element)
gibt genau danntrue
zurück, wenn der Stack das Element enthält.indexOf(element)
: Falls das Element auf dem Stack enthalten ist, wird der Index des Elements zurückgegeben, ansonsten -1.
LinkedList
Eine LinkedList
ist eine Liste, bei der man Elemente an beiden Enden beliebig hinzufügen oder wegnehmen kann. Im Gegensatz zu einer ArrayList wird zum Speichern der Liste aber kein Array verwendet, sondern jedes Element wird in ein „Knoten-Objekt“ verpackt und diese speichern zusätzlich Referenzen auf den Vorgänger- und Nachfolgerknoten, siehe auch den Wikipedia-Artikel hier.
Methoden:
add(element)
fügt am Ende der Liste ein Element hinzuaddLast(element)
wirkt identisch zuadd
push(element)
wirkt identisch zuadd
addFirst(element)
fügt am Ende der Liste ein Element hinzupoll()
entnimmt das Element am Kopf der Liste und gibt es zurück.peek()
gibt das Element am Kopf der Liste zurück, verändert die Liste aber dabei nicht.removeFirstOccurrence(element)
löscht das erste Element der Liste, das gleich dem übergebenen Element ist.removeLastOccurrence(element)
löscht das letzte Element der Liste, das gleich dem übergebenen Element ist.removeFirst()
Entnimmt das Element am Anfang der Liste und gibt es zurück.removeLast()
Entnimmt das Element am Ende der Liste und gibt es zurück.pop()
wirkt identisch zuremoveLast
.peekFirst()
gibt das Element am Anfang der Liste zurück, verändert die Liste aber nicht.peekLast()
gibt das Element am Ende der Liste zurück, verändert die Liste aber nicht.size()
gibt die Anzahl der Elemente in der Liste zurückremove(element)
entfernt - falls vorhanden - das Element aus der Liste.remove(index)
entfernt das Element mit dem angegebenen Index aus der Listeclear()
entfernt alle Elemente aus der Liste.contains(element)
gibt genau danntrue
zurück, wenn die Liste das Element enthält.indexOf(element)
: Falls das Element in der Liste enthalten ist, wird der Index des Elements zurückgegeben, ansonsten -1.addAll(liste)
fügt der Liste alle Elemente der übergebenen Liste hinzu. Letztere wird dabei nicht verändert.