Java HashMap: Daten smart als Key-Value-Paare organisieren
Mit der Java-HashMap-Klasse speicherst du Daten ganz einfach in Schlüssel-Wert-Paaren. Das macht nicht nur die Verwaltung deiner Listen bequemer, sondern eröffnet dir auch viele Möglichkeiten beim Datenzugriff. Wir zeigen dir die wichtigsten Methoden im Überblick.
Was sind HashMaps in Java?
Es gibt verschiedene Wege, Daten zu sichern und wieder abzurufen. Je nach Vorhaben eignet sich eine bestimmte Methode besser als andere. Oft ist die Java HashMap Class dabei die ideale Wahl. Im Gegensatz zu anderen Ansätzen speichert diese Klasse Informationen als Schlüssel-Wert-Paare. Das Prinzip: Jedem Schlüssel (Key) ist exakt ein Wert (Value) zugeordnet. Willst du einen Wert abrufen, nutzt du den passenden Schlüssel und erhältst sofort das richtige Ergebnis. Dabei können Schlüssel und Werte aus völlig unterschiedlichen Datentypen wie Strings, Zahlen oder Objekten bestehen.
Die Java-HashMap-Klasse bringt dir gleich mehrere Vorteile. Sie ermöglicht dir eine performante Suche innerhalb der Programmiersprache. Zudem verhindert das Schlüssel-Wert-Prinzip, dass ein Key mehrfach vergeben wird – Dubletten sind also ausgeschlossen. Lediglich Objekte selbst können mit verschiedenen Schlüsseln mehrfach vorkommen. Auch in Sachen Performance punktet diese Methode gegenüber starren Listen, da sie deutlich flexibler ist. Das ist auch ein Pluspunkt von Key-Value-Stores, die auf derselben Logik basieren. In den nächsten Abschnitten erfährst du, wie du Java HashMaps erstellst und für deine Projekte nutzt.
Wie werden sie erstellt?
Bevor du eine neue HashMap in Java anlegen kannst, musst du die Klasse importieren. Nutze dafür den Java-Befehl import. Danach kannst du die Map wie folgt erstellen:
import java.util.HashMap;
HashMap<String, String> nameDerHashMap = new HashMap<String, String> ();javaDie beiden Datentypen, die hier durch ein Komma getrennt sind (in diesem Fall String, String), definieren den Schlüssel und den Wert.
Neue HashMap in Java erzeugen
Schauen wir uns das Ganze an einem praktischen Beispiel an: Eine Kundenliste für ein Unternehmen. Diese Liste enthält den Namen der Kundschaft sowie eine eindeutige Kundennummer. Während die Kundennummer (unser Schlüssel) einmalig ist, könnten theoretisch mehrere Personen denselben Namen tragen – diese bekämen dann einfach eine eigene Nummer. Die Nummer speichern wir als Datentyp Integer, die Namen als Strings. So sieht die HashMap in Java aus:
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
HashMap<Integer, String> kundenliste = new HashMap<>();
}
}javaElemente hinzufügen
Aktuell ist unsere Java HashMap noch leer. Um neue Schlüssel-Wert-Paare einzutragen, verwenden wir die Methode put(). In unserem Beispiel sieht das so aus:
public class Main {
public static void main(String[] args) {
HashMap<Integer, String> kundenliste = new HashMap<>();
kundenliste.put (1077, "Sabine Schulz");
kundenliste.put (15312, "Peter Smith");
kundenliste.put (73329, "Maria Grosso");
System.out.println(kundenliste);
}
}javaMit dem Befehl System.out.println lassen wir uns die Liste anzeigen. Die Ausgabe sieht dann so aus:
{1077=Sabine Schulz, 15312=Peter Smith, 73329=Maria Grosso}javaAuf Elemente zugreifen
Die Kundenliste steht, doch wie greifen wir nun auf einzelne Einträge zu? Dafür übergeben wir den Schlüssel an die Methode get(). Hier ein Beispiel:
public class Main {
public static void main(String[] args) {
HashMap<Integer, String> kundenliste = new HashMap<>();
kundenliste.put (1077, "Sabine Schulz");
kundenliste.put (15312, "Peter Smith");
kundenliste.put (73329, "Maria Grosso");
System.out.println(kundenliste.get(1077));
}
}javaAls Ergebnis wird uns nun der Name „Sabine Schulz“ ausgegeben.
Einzelne oder alle Einträge entfernen
Möchtest du einen spezifischen Eintrag löschen, nutzt du die Methode remove(). Das funktioniert in der Praxis so:
public class Main {
public static void main(String[] args) {
HashMap<Integer, String> kundenliste = new HashMap<>();
kundenliste.put (1077, "Sabine Schulz");
kundenliste.put (15312, "Peter Smith");
kundenliste.put (73329, "Maria Grosso");
kundenliste.remove(1077);
System.out.println(kundenliste);
}
}javaDie aktuelle Liste sieht danach so aus:
{15312=Peter Smith, 73329=Maria Grosso}javaDu kannst auch die komplette Liste auf einmal leeren. Dafür gibt es die Methode clear(). Angewendet auf unser Beispiel:
public class Main {
public static void main(String[] args) {
HashMap<Integer, String> kundenliste = new HashMap<>();
kundenliste.put (1077, "Sabine Schulz");
kundenliste.put (15312, "Peter Smith");
kundenliste.put (73329, "Maria Grosso");
kundenliste.clear();
System.out.println(kundenliste);
}
}javaDie Ausgabe bleibt in diesem Fall leer:
{ }javaAnzahl der Einträge ermitteln
Auch wenn unser Beispiel klein ist, kannst du mit dieser Klasse riesige Datenmengen verwalten. Um herauszufinden, wie viele Einträge – also wie viele Kund:innen – sich in deiner Map befinden, nutzt du size(). Die Anwendung ist simpel:
public class Main {
public static void main(String[] args) {
HashMap<Integer, String> kundenliste = new HashMap<>();
kundenliste.put (1077, "Sabine Schulz");
kundenliste.put (15312, "Peter Smith");
kundenliste.put (73329, "Maria Grosso");
System.out.println(kundenliste.size());
}
}javaIn unserem Fall erhalten wir als Ergebnis die Zahl 3.
Schlüssel oder Werte einzeln darstellen
Manchmal benötigst du nur eine Liste aller Schlüssel oder aller Werte. Das lässt sich über eine for-each-Schleife lösen. Mit der Methode keySet() sprichst du die Schlüssel an, mit values() die Werte. Letzteres sieht so aus:
public class Main {
public static void main(String[] args) {
HashMap<Integer, String> kundenliste = new HashMap<>();
kundenliste.put (1077, "Sabine Schulz");
kundenliste.put (15312, "Peter Smith");
kundenliste.put (73329, "Maria Grosso");
for (String i : kundenliste.values()) {
System.out.println(i);
}
}
}javaDas Ergebnis der Abfrage:
Sabine Schulz
Peter Smith
Maria GrossojavaVerfügbarkeit eines Elements prüfen
Du kannst nicht nur Daten abrufen, sondern auch checken, ob ein bestimmtes Element überhaupt existiert. Dafür nutzt du containsKey() für Schlüssel oder containsValue() für Werte. Ist der gesuchte Inhalt vorhanden, gibt Java „true“ aus, ansonsten „false“. So setzt du beide Methoden ein:
public class Main {
public static void main(String[] args) {
HashMap<Integer, String> kundenliste = new HashMap<>();
kundenliste.put (1077, "Sabine Schulz");
kundenliste.put (15312, "Peter Smith");
kundenliste.put (73329, "Maria Grosso");
System.out.println(kundenliste.containsKey(15312));
System.out.println(kundenliste.containsValue("Stuart Miller");
}
}javaDa die Nummer „15312“ existiert, der Name „Stuart Miller“ aber nicht, sieht die Ausgabe so aus:
true
falsejava