Initialisation de HashMap en Java : le secret de la méthode « littérale »

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Comment initialiser HashMap en Java sans perdre la tête : analyse complète pour débutants

\n\n

Avez-vous déjà écrit du code en Java en ayant l'impression que pour créer un simple dictionnaire, il fallait écrire tout un poème ? Surtout quand on veut le faire de manière élégante et compacte, comme en Python ou JavaScript. Une douleur familière ? Sur Stack Overflow, la question sur la façon d'initialiser HashMap de manière littérale a recueilli des milliers de vues. Et ce n'est pas un hasard.

\n\n

Dans cet article, nous allons passer en revue toutes les méthodes légales d'initialisation de HashMap en Java, de la classique à la moderne, avec des exemples de code et des explications pour les débutants. Vous apprendrez à remplir une map en une seule ligne, quand utiliser Map.of(), et pourquoi double brace initialization est une arme à double tranchant.

\n\n

Pourquoi le simple fait d'« ajouter » des éléments est-il pénible ?

\n\n

Imaginez que vous deviez créer un HashMap avec trois paires « clé-valeur ». Le code typique d'un débutant ressemble à ceci :

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

Cela semble correct, mais quand vous avez dix maps de ce type, le code devient une longue liste. On aimerait de la concision, n'est-ce pas ? En Python, cela se fait en une seule ligne : dict = {"apple": 5, "banana": 3}. Et en Java ? Spoiler : il existe plusieurs méthodes, et nous allons les analyser maintenant.

\n\n

Méthode n°1 : Double Brace Initialization (double initialisation)

\n\n

La méthode la plus populaire (et la plus controversée) est la double brace initialization. Elle ressemble à ceci :

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

Comment cela fonctionne-t-il ? Les premières accolades créent une classe interne anonyme qui hérite de HashMap. Les secondes sont un bloc d'initialisation d'instance, qui s'exécute lors de la création de l'objet. Tout ce qui se trouve à l'intérieur correspond à des appels put().

\n\n

Avantages :

\n
    \n
  • Le code devient plus compact et plus lisible.
  • \n
  • Pas besoin d'écrire plusieurs lignes avec put().
  • \n
\n\n

Inconvénients (et ils sont nombreux) :

\n
    \n
  • Performance : une classe anonyme est créée à chaque fois. C'est un travail supplémentaire pour la JVM.
  • \n
  • Mémoire : la classe anonyme contient une référence à la classe externe, ce qui peut provoquer des fuites mémoire.
  • \n
  • Sérialisation : si vous essayez de sérialiser une telle map, des problèmes peuvent survenir.
  • \n
  • Incompatibilité : ne fonctionne pas avec certains frameworks (par exemple, avec certaines versions de Gson).
  • \n
\n\n

Conclusion : la méthode fonctionne, mais il est préférable de l'utiliser uniquement dans du code de test ou des projets personnels. Pour la production, elle n'est pas recommandée.

\n\n

Méthode n°2 : Guava (bibliothèque de Google)

\n\n

Si vous utilisez Google Guava (et c'est une bibliothèque très populaire), le problème se résout élégamment :

\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

Caractéristiques :

\n
    \n
  • Crée une map immuable (immutable).
  • \n
  • La méthode of() est surchargée pour 0 à 5 paires. Pour plus, utilisez ImmutableMap.builder().
  • \n
  • Idéale pour les configurations et les données statiques.
  • \n
\n\n

Inconvénient : nécessite d'ajouter une dépendance externe. Si le projet utilise déjà Guava, c'est parfait. Sinon, le jeu n'en vaut peut-être pas la chandelle.

\n\n

Méthode n°3 : Java 9+ — Map.of() et Map.ofEntries()

\n\n

À partir de Java 9, la bibliothèque standard a introduit la méthode M

Blogs

Book Recommendations