Maîtriser Java HashMap : Opérations, Exemples et Bonnes Pratiques
Maîtriser Java HashMap
Explorez la classe Java HashMap – ses fonctionnalités principales, opérations courantes et exemples pratiques – pour l'utiliser en confiance dans des applications réelles.
La classe HashMap, partie du framework de collections Java, implémente une table de hachage stockant les données en paires clé/valeur. Chaque clé est unique et agit comme identifiant pour sa valeur associée. La classe implémente l'interface Map, fournissant une API versatile pour manipuler les données.
Création d'un HashMap
Commencez par importer le package java.util.HashMap :
import java.util.HashMap;
Puis instanciez la map. Vous pouvez spécifier un type de clé générique K et un type de valeur V, ou compter sur l'inférence de type :
HashMap<K, V> numbers = new HashMap<>();
Exemple avec types concrets :
HashMap<String, Integer> numbers = new HashMap<>();
Exemple 1 : Création Basique d'un HashMap
import java.util.HashMap;
class Main {
public static void main(String[] args) {
HashMap<String, Integer> languages = new HashMap<>();
languages.put("Java", 8);
languages.put("JavaScript", 1);
languages.put("Python", 3);
System.out.println("HashMap: " + languages);
}
}
Sortie
HashMap: {Java=8, JavaScript=1, Python=3}
Opérations Principales sur HashMap
La classe HashMap offre un riche ensemble de méthodes. Voici les plus fréquemment utilisées :
- Ajouter des éléments
- Accéder aux éléments
- Mettre à jour des éléments
- Supprimer des éléments
1. Ajout d'Éléments
Utilisez put() pour insérer une paire clé/valeur. Si la clé existe déjà, la valeur est remplacée.
import java.util.HashMap;
class Main {
public static void main(String[] args) {
HashMap<String, Integer> numbers = new HashMap<>();
System.out.println("HashMap Initial: " + numbers);
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("HashMap après put(): " + numbers);
}
}
Sortie
HashMap Initial: {} HashMap après put(): {One=1, Two=2, Three=3}
Clé : String, Valeur : Integer dans cet exemple.
2. Accès aux Éléments
Récupérez une valeur avec get(key). La méthode retourne null si la clé est absente.
import java.util.HashMap;
class Main {
public static void main(String[] args) {
HashMap<Integer, String> languages = new HashMap<>();
languages.put(1, "Java");
languages.put(2, "Python");
languages.put(3, "JavaScript");
System.out.println("HashMap: " + languages);
String value = languages.get(1);
System.out.println("Valeur à la clé 1: " + value);
}
}
Sortie
HashMap: {1=Java, 2=Python, 3=JavaScript} Valeur à la clé 1: Java
Vous pouvez aussi obtenir l'ensemble complet des clés, la collection des valeurs ou l'ensemble des entrées via keySet(), values() et entrySet() :
import java.util.HashMap;
class Main {
public static void main(String[] args) {
HashMap<Integer, String> languages = new HashMap<>();
languages.put(1, "Java");
languages.put(2, "Python");
languages.put(3, "JavaScript");
System.out.println("HashMap: " + languages);
System.out.println("Clés: " + languages.keySet());
System.out.println("Valeurs: " + languages.values());
System.out.println("Entrées: " + languages.entrySet());
}
}
Sortie
HashMap: {1=Java, 2=Python, 3=JavaScript} Clés: [1, 2, 3] Valeurs: [Java, Python, JavaScript] Entrées: [1=Java, 2=Python, 3=JavaScript]
3. Mise à Jour des Valeurs
La méthode replace(key, newValue) échange la valeur existante pour la clé donnée. Elle retourne l'ancienne valeur ou null si la clé était absente.
import java.util.HashMap;
class Main {
public static void main(String[] args) {
HashMap<Integer, String> languages = new HashMap<>();
languages.put(1, "Java");
languages.put(2, "Python");
languages.put(3, "JavaScript");
System.out.println("HashMap Original: " + languages);
languages.replace(2, "C++");
System.out.println("Après replace(): " + languages);
}
}
Sortie
HashMap Original: {1=Java, 2=Python, 3=JavaScript} Après replace(): {1=Java, 2=C++, 3=JavaScript}
4. Suppression d'Éléments
Supprimez un mapping avec remove(key), qui retourne la valeur supprimée. Pour une suppression conditionnelle, utilisez remove(key, value), qui ne supprime que si le mapping courant correspond à la valeur spécifiée.
import java.util.HashMap;
class Main {
public static void main(String[] args) {
HashMap<Integer, String> languages = new HashMap<>();
languages.put(1, "Java");
languages.put(2, "Python");
languages.put(3, "JavaScript");
System.out.println("HashMap: " + languages);
String removed = languages.remove(2);
System.out.println("Valeur supprimée: " + removed);
System.out.println("HashMap Mis à Jour: " + languages);
}
}
Sortie
HashMap: {1=Java, 2=Python, 3=JavaScript} Valeur supprimée: Python HashMap Mis à Jour: {1=Java, 3=JavaScript}
Méthodes Supplémentaires de HashMap
| Méthode | Description |
|---|---|
| clear() | Supprime tous les mappings |
| compute() | Calcule une nouvelle valeur pour une clé |
| computeIfAbsent() | Calcule une valeur seulement si la clé est manquante |
| computeIfPresent() | Calcule une valeur seulement si la clé existe |
| merge() | Fusionne un nouveau mapping avec un existant |
| clone() | Crée une copie superficielle |
| containsKey() | Vérifie une clé spécifique |
| containsValue() | Vérifie une valeur spécifique |
| size() | Nombre de paires clé/valeur |
| isEmpty() | Si la map est vide |
Itération sur un HashMap
Utilisez une boucle for-each pour parcourir les clés, valeurs ou entrées. Importez java.util.Map.Entry pour l'itération sur les entrées.
import java.util.HashMap;
import java.util.Map.Entry;
class Main {
public static void main(String[] args) {
HashMap<Integer, String> languages = new HashMap<>();
languages.put(1, "Java");
languages.put(2, "Python");
languages.put(3, "JavaScript");
System.out.println("HashMap: " + languages);
System.out.print("Clés: ");
for (Integer key : languages.keySet()) {
System.out.print(key + ", ");
}
System.out.print("\nValeurs: ");
for (String value : languages.values()) {
System.out.print(value + ", ");
}
System.out.print("\nEntrées: ");
for (Entry<Integer, String> entry : languages.entrySet()) {
System.out.print(entry + ", ");
}
}
}
Sortie
HashMap: {1=Java, 2=Python, 3=JavaScript} Clés: 1, 2, 3, Valeurs: Java, Python, JavaScript, Entrées: 1=Java, 2=Python, 3=JavaScript,
Création d'un HashMap depuis une Autre Map
Instanciez un HashMap avec le contenu d'une map existante :
import java.util.HashMap;
import java.util.TreeMap;
class Main {
public static void main(String[] args) {
TreeMap<String, Integer> evenNumbers = new TreeMap<>();
evenNumbers.put("Two", 2);
evenNumbers.put("Four", 4);
System.out.println("TreeMap: " + evenNumbers);
HashMap<String, Integer> numbers = new HashMap<>(evenNumbers);
numbers.put("Three", 3);
System.out.println("HashMap: " + numbers);
}
}
Sortie
TreeMap: {Four=4, Two=2} HashMap: {Two=2, Three=3, Four=4}
Les paramètres optionnels du constructeur permettent de définir la capacité initiale et le facteur de charge :
HashMap<K, V> numbers = new HashMap<>(8, 0.6f);
- Capacité : 8 entrées avant rehachage.
- Facteur de charge : 0.6 déclenche un redimensionnement quand 60% plein.
Les valeurs par défaut sont capacity = 16 et load factor = 0.75.
Pour des analyses plus approfondies, consultez la documentation officielle Java ou des ressources autoritatives comme "Effective Java" de Joshua Bloch.
Java
- Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
- Commentaires Java : Types, utilisation et bonnes pratiques
- Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
- Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
- Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
- Annotations Java expliquées : types, placement et exemples pratiques
- Assertions Java : guide pratique pour détecter les bugs et assurer la fiabilité du code