Initialisierung von HashMap in Java: Das Geheimnis der „literalen“ Methode

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

So initialisieren Sie HashMap in Java, ohne verrückt zu werden: Eine vollständige Analyse für Anfänger

\n\n

Haben Sie jemals in Java programmiert und das Gefühl gehabt, dass Sie ein ganzes Gedicht schreiben müssen, um ein einfaches Wörterbuch zu erstellen? Besonders, wenn Sie es schön und kompakt machen möchten, wie in Python oder JavaScript. Ein bekanntes Problem? Auf Stack Overflow hat die Frage, wie man HashMap auf literale Weise initialisiert, tausende von Aufrufen erhalten. Und das ist kein Zufall.

\n\n

In diesem Artikel werden wir alle legalen Methoden zur Initialisierung von HashMap in Java durchgehen, von der klassischen bis zur modernen, mit Codebeispielen und Erklärungen für Anfänger. Sie erfahren, wie Sie eine Map in einer Zeile füllen, wann Sie Map.of() verwenden sollten und warum Double Brace Initialization ein zweischneidiges Schwert ist.

\n\n

Warum ist das einfache „Hinzufügen“ von Elementen so mühsam?

\n\n

Stellen Sie sich vor, Sie müssen eine HashMap mit drei Schlüssel-Wert-Paaren erstellen. Typischer Code eines Anfängers sieht so aus:

\n\n
HashMap<String, Integer> map = new HashMap<>();\nmap.put("apple", 5);\nmap.put("banana", 3);\nmap.put("orange", 7);
\n\n

Das scheint in Ordnung, aber wenn Sie zehn solcher Maps haben, wird der Code zu einem langen Text. Sie wünschen sich doch Prägnanz, oder? In Python wird das in einer Zeile erledigt: dict = {"apple": 5, "banana": 3}. Und in Java? Spoiler: Es gibt mehrere Möglichkeiten, und wir werden sie jetzt durchgehen.

\n\n

Methode Nr. 1: Double Brace Initialization (Doppelte Initialisierung)

\n\n

Die beliebteste (und umstrittenste) Methode ist die Double Brace Initialization. Sie sieht so aus:

\n\n
HashMap<String, Integer> map = new HashMap<>() {{\n    put("apple", 5);\n    put("banana", 3);\n    put("orange", 7);\n}};
\n\n

Wie funktioniert das? Die ersten geschweiften Klammern erstellen eine anonyme innere Klasse, die von HashMap erbt. Die zweiten sind ein Instanzinitialisierungsblock, der bei der Objekterstellung ausgeführt wird. Alles darin sind put()-Aufrufe.

\n\n

Vorteile:

\n
    \n
  • Der Code wird kompakter und lesbarer.
  • \n
  • Sie müssen nicht mehrere Zeilen mit put() schreiben.
  • \n
\n\n

Nachteile (und es gibt viele):

\n
    \n
  • Leistung: Jedes Mal wird eine anonyme Klasse erstellt. Das ist zusätzliche Arbeit für die JVM.
  • \n
  • Speicher: Die anonyme Klasse enthält eine Referenz auf die äußere Klasse, was zu Speicherlecks führen kann.
  • \n
  • Serialisierung: Wenn Sie versuchen, eine solche Map zu serialisieren, können Probleme auftreten.
  • \n
  • Inkompatibilität: Funktioniert nicht mit einigen Frameworks (z. B. mit einigen Versionen von Gson).
  • \n
\n\n

Fazit: Die Methode ist funktionsfähig, aber es ist besser, sie nur in Testcode oder in persönlichen Projekten zu verwenden. Für die Produktion wird sie nicht empfohlen.

\n\n

Methode Nr. 2: Guava (Bibliothek von Google)

\n\n

Wenn Sie Google Guava verwenden (eine sehr beliebte Bibliothek), wird das Problem elegant gelöst:

\n\n
import com.google.common.collect.ImmutableMap;\n\nMap<String, Integer> map = ImmutableMap.of(\n    "apple", 5,\n    "banana", 3,\n    "orange", 7\n);
\n\n

Besonderheiten:

\n
    \n
  • Es wird eine unveränderliche Map (immutable) erstellt.
  • \n
  • Die Methode of() ist für 0–5 Paare überladen. Bei mehr verwenden Sie ImmutableMap.builder().
  • \n
  • Ideal für Konfigurationen und statische Daten.
  • \n
\n\n

Nachteil: Sie müssen eine externe Abhängigkeit einbinden. Wenn das Projekt bereits Guava verwendet – großartig. Wenn nicht – der Aufwand lohnt sich möglicherweise nicht.

\n\n

Methode Nr. 3: Java 9+ – Map.of() und Map.ofEntries()

\n\n

Ab Java 9 gibt es in der Standardbibliothek die Methode M

Blogs

Buchempfehlungen