CodeGym /Kurse /JAVA 25 SELF /„Eigenes Wörterbuch“ — Has...

„Eigenes Wörterbuch“ — HashMap<K,V>

JAVA 25 SELF
Level 12, Lektion 2
Verfügbar

1. Einleitung

Wir wissen bereits, dass ArrayList ein „unendliches Array“ ist, das automatisch wächst. Es hat jedoch eine Einschränkung: Der Zugriff auf Elemente erfolgt über die Nummer (Index). Wenn wir eine Liste mit tausend Personen haben und die Telefonnummer von Alice finden möchten, müssen wir entweder ihren Index kennen oder alle der Reihe nach durchgehen.

Im Alltag suchen wir Daten jedoch oft anhand eines eindeutigen Merkmals:

  • über den Namen suchen wir die Telefonnummer,
  • über die Passnummer finden wir den Inhaber,
  • über den Login finden wir das Passwort,
  • über die ID suchen wir ein Objekt in der Datenbank.

Dafür brauchen wir eine Struktur, die kann: „Schlüssel erhalten → Wert sofort finden“. In Java übernimmt das die HashMap<K,V>.

Analogie:
Stellen Sie sich ein gewöhnliches gedrucktes Wörterbuch vor. Sie suchen die Übersetzung des Wortes „house“. Sie müssen nicht alle Seiten der Reihe nach durchblättern. Sie gehen sofort zum Buchstaben „H“ und finden das benötigte Wort. So funktioniert auch die HashMap: Über den Schlüssel (Wort) erhalten wir sofort den Wert (Übersetzung).

Ein Wörterbuch erstellen

Um ein Wörterbuch zu erstellen, müssen Sie angeben, welche Typen die Schlüssel und die Werte haben werden.

import java.util.HashMap;

HashMap<String, String> phonebook = new HashMap<String, String>();

Hier:

  • String (erster Typ) ist der Schlüsseltyp (Name der Person).
  • String (zweiter Typ) ist der Werttyp (Telefonnummer).

Jetzt ist phonebook wie ein echtes Telefonbuch.

Weitere Varianten:

HashMap<String, Integer> grades = new HashMap<String, Integer>();  // Name → Note
HashMap<Integer, String> users = new HashMap<Integer, String>();   // ID → Name
HashMap<String, Boolean> flags = new HashMap<String, Boolean>();   // Schlüssel → boolescher Wert

Im Unterschied zur ArrayList hat das Wörterbuch keine Methode add(), dafür aber eigene, nicht weniger interessante Methoden.

2. Methode put(key, value) — ein Paar hinzufügen

Der Hauptunterschied der HashMap gegenüber Arrays und Listen besteht darin, dass sie nicht nur eine Menge von Werten speichert, sondern Schlüssel–Wert-Paare. Das macht sie einem echten Wörterbuch ähnlich: Jedes Wort hat eine Übersetzung, jeder Name eine Telefonnummer, jeder Login ein Passwort.

Beispiel:

phonebook.put("Alice", "+380501112233");
phonebook.put("Bob", "+380671234567");

Jetzt enthält unser Telefonbuch:

  • der Schlüssel "Alice" ist mit dem Wert "+10501112233" verknüpft,
  • der Schlüssel "Bob" ist mit dem Wert "+10671234567" verknüpft.

Das bedeutet, dass wir zum Abrufen des Werts (Telefonnummer) lediglich den Schlüssel (Namen) kennen müssen.

Wichtig: Schlüssel sind eindeutig. Wenn wir versuchen, für einen bereits vorhandenen Schlüssel einen neuen Wert hinzuzufügen, wird der alte Wert überschrieben.

phonebook.put("Alice", "+10999999999");

Jetzt hat Alice nur noch die neue Nummer: Die alte Nummer ist verloren.

Fazit: put ist die Methode zum Hinzufügen oder Aktualisieren von Einträgen. Ist der Schlüssel neu, wird der Eintrag erstellt. Existiert der Schlüssel bereits, wird der Eintrag aktualisiert.

3. Methode get(key) — Wert abrufen

Um einen Wert zu finden, muss man den Schlüssel kennen. Das ist der Clou der HashMap: Die Suche nach einem Schlüssel funktioniert sehr schnell, nahezu sofort, unabhängig davon, ob wir tausend Einträge oder eine Million haben.

Beispiel:

System.out.println(phonebook.get("Alice"));

Ausgabe:

+10501112233

Wenn es einen solchen Schlüssel nicht gibt, liefert get null zurück:

System.out.println(phonebook.get("Charlie")); // null

Das heißt: „Der Schlüssel ‚Charlie‘ ist nicht im Wörterbuch vorhanden.“

4. Methode containsKey(key) — Vorhandensein prüfen

Um nicht auf null zu stoßen, ist es hilfreich, zunächst zu prüfen, ob der Schlüssel im Wörterbuch existiert.

Beispiel:

System.out.println(phonebook.containsKey("Charlie"));

Ausgabe:

false

So können wir im Voraus entscheiden:

  • wenn es den Schlüssel nicht gibt — einen neuen Eintrag erstellen,
  • wenn es den Schlüssel gibt — ihn aktualisieren.

Häufiges Muster:

if (phonebook.containsKey("Alice")) 
{
    System.out.println("Alice hat bereits eine Nummer!");
} 
else 
{
    phonebook.put("Alice", "+10111111111");
}

5. Methode remove(key) — Eintrag löschen

Löschen funktioniert ebenso einfach: Man muss nur den Schlüssel kennen.

phonebook.remove("Bob");
System.out.println(phonebook.get("Bob"));

Ausgabe:

null

Jetzt gibt es den Eintrag mit dem Schlüssel "Bob" nicht mehr im Wörterbuch.

6. Alle Paare durchlaufen

Oft müssen wir nicht nur Daten zu einem bestimmten Schlüssel abrufen, sondern das gesamte Wörterbuch ausgeben. Dafür wird die Methode entrySet() verwendet.

for (var entry : phonebook.entrySet()) {
    System.out.println(entry.getKey() + " -> " + entry.getValue());
}

Beispielausgabe:

Alice -> +10501112233

Damit erhalten wir sofort Zugriff sowohl auf den Schlüssel (entry.getKey()) als auch auf den Wert (entry.getValue()).

7. Praxis: Wörter zählen

Betrachten wir eine klassische Aufgabe — das Zählen der Anzahl von Wortwiederholungen in einem Text. Das ist eines der anschaulichsten Beispiele dafür, wozu eine HashMap überhaupt benötigt wird.

String text = "java java core java";
HashMap<String, Integer> freq = new HashMap<String, Integer>();

for (String w : text.split(" ")) 
{
    Integer old = freq.get(w);
    freq.put(w, (old == null) ? 1 : old + 1);
}

System.out.println(freq);

Ausgabe:

{core=1, java=3}

Schritt für Schritt, was hier passiert:

  1. Wir haben den String "java java core java" in Wörter aufgeteilt.
  2. Für jedes Wort prüfen wir, ob es bereits im Wörterbuch vorhanden ist (freq.get(w)).
  3. Wenn nicht (null), ist es das erste Auftreten des Wortes → wir legen 1 ab.
  4. Wenn ja, ist das Wort schon vorgekommen → wir erhöhen den Wert um eins.

Reale Anwendungsfälle:

  • Zählen der Anzahl von API-Aufrufen,
  • Statistik zur Wortfrequenz in einem Text,
  • Speichern der Stückzahlen im Lager.

8. Praxis: Telefonbuch

Schreiben wir eine etwas größere Anwendung.

import java.util.HashMap;
import java.util.Scanner;

public class PhonebookApp {
    public static void main(String[] args) 
    {
        HashMap<String, String> phonebook = new HashMap<String, String>();
        Scanner console = new Scanner(System.in);

        while (true) 
        {
            System.out.print("Geben Sie einen Namen ein (oder eine leere Zeile zum Beenden): ");
            String name = console.nextLine();
            if (name.isEmpty()) break;

            System.out.print("Geben Sie die Nummer ein: ");
            String phone = console.nextLine();

            phonebook.put(name, phone);
        }

        System.out.println("Telefonbuch:");
        for (var entry : phonebook.entrySet()) 
        {
            System.out.println(entry.getKey() + " -> " + entry.getValue());
        }
    }
}

Das Programm funktioniert wie ein kleines Nachschlagewerk. Sie geben Namen und Telefonnummern ein, sie werden in der HashMap gespeichert. Am Ende können Sie die gesamte Liste ausgeben. Wörterbücher werden in realen Projekten sehr häufig verwendet.

1
Aufgabe
JAVA 25 SELF, Level 12, Lektion 2
Gesperrt
Hinzufügen und Abrufen eines Werts
Hinzufügen und Abrufen eines Werts
1
Aufgabe
JAVA 25 SELF, Level 12, Lektion 2
Gesperrt
Prüfung auf Vorhandensein eines Schlüssels
Prüfung auf Vorhandensein eines Schlüssels
1
Aufgabe
JAVA 25 SELF, Level 12, Lektion 2
Gesperrt
Eintrag aus der Map entfernen
Eintrag aus der Map entfernen
1
Aufgabe
JAVA 25 SELF, Level 12, Lektion 2
Gesperrt
Wortanzahl in einem Text
Wortanzahl in einem Text
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION