Dans ce didacticiel, nous allons découvrir la classe Java LinkedHashMap et ses opérations à l'aide d'exemples.
La LinkedHashMap
classe du framework de collections Java fournit la table de hachage et l'implémentation de la liste chaînée de l'interface Map.
L' LinkedHashMap
interface étend la classe HashMap pour stocker ses entrées dans une table de hachage. Il maintient en interne une liste à double chaînage parmi toutes ses entrées pour ordonner ses entrées.
Créer un LinkedHashMap
Afin de créer un hashmap lié, nous devons d'abord importer le java.util.LinkedHashMap
package. Une fois que nous importons le package, voici comment créer des hashmaps liés en Java.
// LinkedHashMap with initial capacity 8 and load factor 0.6 LinkedHashMap numbers = new LinkedHashMap(8, 0.6f);
Dans le code ci-dessus, nous avons créé un hashmap lié nommé numbers.
Ici,
- Clé - un identifiant unique utilisé pour associer chaque élément (valeur) dans une carte
- Valeur - éléments associés par les clés dans une carte
Remarquez la pièce new LinkedHashMap(8, 0.6)
. Ici, le premier paramètre est la capacité et le deuxième paramètre est loadFactor .
- capacité - La capacité de ce hashmap lié est de 8. Cela signifie qu'il peut stocker 8 entrées.
- loadFactor - Le facteur de charge de ce hashmap lié est de 0,6. Cela signifie que chaque fois que notre carte de hachage est remplie à 60%, les entrées sont déplacées vers une nouvelle table de hachage de deux fois la taille de la table de hachage d'origine.
Capacité par défaut et facteur de charge
Il est possible de créer un hashmap lié sans définir sa capacité et son facteur de charge. Par exemple,
//LinkedHashMap with default capacity and load factor LinkedHashMap numbers1 = new LinkedHashMap();
Par défaut,
- la capacité du hashmap lié sera de 16
- le facteur de charge sera de 0,75
Remarque : La LinkedHashMap
classe nous permet également de définir l'ordre de ses entrées. Par exemple
// LinkedHashMap with specified order LinkedHashMap numbers2 = new LinkedHashMap(capacity, loadFactor, accessOrder);
Ici, accessOrder est une valeur booléenne. Sa valeur par défaut est false
. Dans ce cas, les entrées du hashmap lié sont classées en fonction de leur ordre d'insertion.
Cependant, si true
est passé en tant qu'accessOrder, les entrées dans le hashmap lié seront classées du moins récemment accédé au plus récemment accédé.
Créer LinkedHashMap à partir d'autres cartes
Voici comment nous pouvons créer un hashmap lié contenant tous les éléments d'autres cartes.
import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( // Creating a LinkedHashMap of even numbers LinkedHashMap evenNumbers = new LinkedHashMap(); evenNumbers.put("Two", 2); evenNumbers.put("Four", 4); System.out.println("LinkedHashMap1: " + evenNumbers); // Creating a LinkedHashMap from other LinkedHashMap LinkedHashMap numbers = new LinkedHashMap(evenNumbers); numbers.put("Three", 3); System.out.println("LinkedHashMap2: " + numbers); ) )
Production
LinkedHashMap1: (Deux = 2, Quatre = 4) LinkedHashMap2: (Deux = 2, Quatre = 4, Trois = 3)
Méthodes de LinkedHashMap
La LinkedHashMap
classe fournit des méthodes qui nous permettent d'effectuer diverses opérations sur la carte.
Insérer des éléments dans LinkedHashMap
put()
- insère le mappage clé / valeur spécifié dans la carteputAll()
- insère toutes les entrées de la carte spécifiée dans cette carteputIfAbsent()
- insère le mappage clé / valeur spécifié dans la carte si la clé spécifiée n'est pas présente dans la carte
Par exemple,
import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( // Creating LinkedHashMap of even numbers LinkedHashMap evenNumbers = new LinkedHashMap(); // Using put() evenNumbers.put("Two", 2); evenNumbers.put("Four", 4); System.out.println("Original LinkedHashMap: " + evenNumbers); // Using putIfAbsent() evenNumbers.putIfAbsent("Six", 6); System.out.println("Updated LinkedHashMap(): " + evenNumbers); //Creating LinkedHashMap of numbers LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); // Using putAll() numbers.putAll(evenNumbers); System.out.println("New LinkedHashMap: " + numbers); ) )
Production
LinkedHashMap d'origine: (Two = 2, Four = 4) LinkedHashMap mis à jour: (Two = 2, Four = 4, Six = 6) New LinkedHashMap: (One = 1, Two = 2, Four = 4, Six = 6)
Accéder aux éléments LinkedHashMap
1. Utilisation de entrySet (), keySet () et values ()
entrySet()
- renvoie un ensemble de tous les mappages clé / valeur de la cartekeySet()
- retourne un ensemble de toutes les clés de la cartevalues()
- renvoie un ensemble de toutes les valeurs de la carte
Par exemple,
import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // Using entrySet() System.out.println("Key/Value mappings: " + numbers.entrySet()); // Using keySet() System.out.println("Keys: " + numbers.keySet()); // Using values() System.out.println("Values: " + numbers.values()); ) )
Production
LinkedHashMap: (Un = 1, Deux = 2, Trois = 3) Mappages clé / valeur: (Un = 1, Deux = 2, Trois = 3) Clés: (Un, Deux, Trois) Valeurs: (1, 2, 3 )
2. Utilisation de get () et getOrDefault ()
get()
- Renvoie la valeur associée à la clé spécifiée. Si la clé n'est pas trouvée, elle revientnull
.getOrDefault()
- Renvoie la valeur associée à la clé spécifiée. Si la clé n'est pas trouvée, elle renvoie la valeur par défaut spécifiée.
Par exemple,
import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // Using get() int value1 = numbers.get("Three"); System.out.println("Returned Number: " + value1); // Using getOrDefault() int value2 = numbers.getOrDefault("Five", 5); System.out.println("Returned Number: " + value2); ) )
Production
LinkedHashMap: (Un = 1, Deux = 2, Trois = 3) Numéro renvoyé: 3 Numéro renvoyé: 5
Éléments de LinkedHashMap supprimés
remove(key)
- renvoie et supprime l'entrée associée à la clé spécifiée de la carteremove(key, value)
- supprime l'entrée de la carte uniquement si la clé spécifiée est mappée à la valeur spécifiée et renvoie une valeur booléenne
Par exemple,
import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // remove method with single parameter int value = numbers.remove("Two"); System.out.println("Removed value: " + value); // remove method with two parameters boolean result = numbers.remove("Three", 3); System.out.println("Is the entry Three removed? " + result); System.out.println("Updated LinkedHashMap: " + numbers); ) )
Production
LinkedHashMap: (Un = 1, Deux = 2, Trois = 3) Valeur supprimée: 2 L'entrée (Trois = 3) est-elle supprimée? Vrai LinkedHashMap mis à jour: (Un = 1)
Autres méthodes de LinkedHashMap
Méthode | La description |
---|---|
clear() | supprime toutes les entrées de la carte |
containsKey() | vérifie si la carte contient la clé spécifiée et renvoie une valeur booléenne |
containsValue() | vérifie si la carte contient la valeur spécifiée et renvoie une valeur booléenne |
size() | renvoie la taille de la carte |
isEmpty() | vérifie si la carte est vide et renvoie une valeur booléenne |
LinkedHashMap contre. HashMap
Le LinkedHashMap
et le HashMap
implémentent tous les deux l' Map
interface. Cependant, il existe des différences entre eux.
LinkedHashMap
maintient une liste à double lien en interne. Pour cette raison, il conserve l'ordre d'insertion de ses éléments.- La
LinkedHashMap
classe nécessite plus de stockage queHashMap
. Cela est dû au fait que lesLinkedHashMap
listes liées sont conservées en interne. - La performance de
LinkedHashMap
est plus lente queHashMap
.