Java LinkedHashMap

In questo tutorial, impareremo a conoscere la classe Java LinkedHashMap e le sue operazioni con l'aiuto di esempi.

La LinkedHashMapclasse del framework delle raccolte Java fornisce l'implementazione della tabella hash e dell'elenco collegato dell'interfaccia Map.

L' LinkedHashMapinterfaccia estende la classe HashMap per memorizzare le sue voci in una tabella hash. Mantiene internamente un elenco a doppio collegamento tra tutte le sue voci per ordinarle.

Creazione di una LinkedHashMap

Per creare una hashmap collegata, dobbiamo java.util.LinkedHashMapprima importare il pacchetto. Una volta importato il pacchetto, ecco come possiamo creare hashmap collegate in Java.

 // LinkedHashMap with initial capacity 8 and load factor 0.6 LinkedHashMap numbers = new LinkedHashMap(8, 0.6f); 

Nel codice sopra, abbiamo creato una hashmap collegata denominata numeri.

Qui,

  • Chiave: un identificatore univoco utilizzato per associare ogni elemento (valore) in una mappa
  • Valore: elementi associati alle chiavi in ​​una mappa

Nota la parte new LinkedHashMap(8, 0.6). Qui, il primo parametro è la capacità e il secondo parametro è loadFactor .

  • capacità - La capacità di questa hashmap collegata è 8. Ciò significa che può memorizzare 8 voci.
  • loadFactor - Il fattore di carico di questa hashmap collegata è 0,6. Ciò significa che ogni volta che la nostra mappa hash è riempita del 60%, le voci vengono spostate in una nuova tabella hash di dimensioni doppie rispetto alla tabella hash originale.

Capacità e fattore di carico predefiniti

È possibile creare una hashmap collegata senza definirne la capacità e il fattore di carico. Per esempio,

 //LinkedHashMap with default capacity and load factor LinkedHashMap numbers1 = new LinkedHashMap(); 

Per impostazione predefinita,

  • la capacità della hashmap collegata sarà 16
  • il fattore di carico sarà 0,75

Nota : la LinkedHashMapclasse ci consente anche di definire l'ordine delle sue voci. Per esempio

 // LinkedHashMap with specified order LinkedHashMap numbers2 = new LinkedHashMap(capacity, loadFactor, accessOrder); 

In questo caso, accessOrder è un valore booleano. Il suo valore predefinito è false. In questo caso le voci nella hashmap collegata vengono ordinate in base al loro ordine di inserimento.

Tuttavia, se trueviene passato come accessOrder, le voci nella hashmap collegata verranno ordinate dall'accesso meno recente a quello a cui si accede più di recente.

Creazione di LinkedHashMap da altre mappe

Ecco come possiamo creare una hashmap collegata contenente tutti gli elementi di altre mappe.

 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); ) ) 

Produzione

 LinkedHashMap1: (Due = 2, Quattro = 4) LinkedHashMap2: (Due = 2, Quattro = 4, Tre = 3) 

Metodi di LinkedHashMap

La LinkedHashMapclasse fornisce metodi che ci consentono di eseguire varie operazioni sulla mappa.

Inserisci elementi in LinkedHashMap

  • put() - inserisce la mappatura chiave / valore specificata nella mappa
  • putAll() - inserisce tutte le voci dalla mappa specificata a questa mappa
  • putIfAbsent() - inserisce la mappatura chiave / valore specificata nella mappa se la chiave specificata non è presente nella mappa

Per esempio,

  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); ) ) 

Produzione

 LinkedHashMap originale: (Two = 2, Four = 4) LinkedHashMap aggiornata: (Two = 2, Four = 4, Six = 6) Nuova LinkedHashMap: (Uno = 1, Due = 2, Quattro = 4, Sei = 6) 

Accedi agli elementi LinkedHashMap

1. Utilizzo di entrySet (), keySet () e values ​​()

  • entrySet() - restituisce un insieme di tutte le mappature chiave / valore della mappa
  • keySet() - restituisce un insieme di tutte le chiavi della mappa
  • values() - restituisce un insieme di tutti i valori della mappa

Per esempio,

 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()); ) ) 

Produzione

 LinkedHashMap: (Uno = 1, Due = 2, Tre = 3) Mappature chiave / valore: (Uno = 1, Due = 2, Tre = 3) Chiavi: (Uno, Due, Tre) Valori: (1, 2, 3 ) 

2. Utilizzo di get () e getOrDefault ()

  • get()- Restituisce il valore associato alla chiave specificata. Se la chiave non viene trovata, ritorna null.
  • getOrDefault()- Restituisce il valore associato alla chiave specificata. Se la chiave non viene trovata, restituisce il valore predefinito specificato.

Per esempio,

 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); ) ) 

Produzione

 LinkedHashMap: (Uno = 1, Due = 2, Tre = 3) Numero restituito: 3 Numero restituito: 5 

Elementi LinkedHashMap rimossi

  • remove(key) - restituisce e rimuove dalla mappa la voce associata alla chiave specificata
  • remove(key, value) - rimuove la voce dalla mappa solo se la chiave specificata è mappata per essere il valore specificato e restituisce un valore booleano

Per esempio,

 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); ) ) 

Produzione

LinkedHashMap: (Uno = 1, Due = 2, Tre = 3) Valore rimosso: 2 La voce (Tre = 3) è stata rimossa? Mappa hash collegata vera aggiornata: (uno = 1)

Altri metodi di LinkedHashMap

Metodo Descrizione
clear() rimuove tutte le voci dalla mappa
containsKey() controlla se la mappa contiene la chiave specificata e restituisce un valore booleano
containsValue() controlla se la mappa contiene il valore specificato e restituisce un valore booleano
size() restituisce la dimensione della mappa
isEmpty() controlla se la mappa è vuota e restituisce un valore booleano

LinkedHashMap vs. HashMap

Sia il LinkedHashMapche il HashMapimplementano l' Mapinterfaccia. Tuttavia, esistono alcune differenze tra di loro.

  • LinkedHashMapmantiene internamente un elenco a doppio collegamento. Per questo motivo, mantiene l'ordine di inserimento dei suoi elementi.
  • La LinkedHashMapclasse richiede più spazio di archiviazione di HashMap. Questo perché LinkedHashMapmantiene gli elenchi collegati internamente.
  • Le prestazioni di LinkedHashMapsono più lente di HashMap.

Articoli interessanti...