Java LinkedHashMap

En este tutorial, aprenderemos sobre la clase Java LinkedHashMap y sus operaciones con la ayuda de ejemplos.

La LinkedHashMapclase del marco de recopilación de Java proporciona la implementación de la tabla hash y la lista vinculada de la interfaz Map.

La LinkedHashMapinterfaz extiende la clase HashMap para almacenar sus entradas en una tabla hash. Internamente mantiene una lista doblemente enlazada entre todas sus entradas para ordenar sus entradas.

Crear un LinkedHashMap

Para crear un mapa hash vinculado, primero debemos importar el java.util.LinkedHashMappaquete. Una vez que importamos el paquete, así es como podemos crear hashmaps vinculados en Java.

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

En el código anterior, hemos creado un mapa de hash vinculado llamado números.

Aquí,

  • Clave: un identificador único que se utiliza para asociar cada elemento (valor) en un mapa.
  • Valor: elementos asociados por las claves en un mapa

Note la pieza new LinkedHashMap(8, 0.6). Aquí, el primer parámetro es la capacidad y el segundo parámetro es loadFactor .

  • capacidad : la capacidad de este mapa hash vinculado es 8. Es decir, puede almacenar 8 entradas.
  • loadFactor : el factor de carga de este hashmap vinculado es 0,6. Esto significa que cada vez que nuestro mapa hash se llena en un 60%, las entradas se mueven a una nueva tabla hash del doble del tamaño de la tabla hash original.

Capacidad y factor de carga predeterminados

Es posible crear un mapa de hash vinculado sin definir su capacidad y factor de carga. Por ejemplo,

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

Por defecto,

  • la capacidad del hashmap vinculado será de 16
  • el factor de carga será 0,75

Nota : La LinkedHashMapclase también nos permite definir el orden de sus entradas. Por ejemplo

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

Aquí, accessOrder es un valor booleano. Su valor predeterminado es false. En este caso, las entradas en el mapa de hash vinculado se ordenan según su orden de inserción.

Sin embargo, si truese pasa como accessOrder, las entradas en el hashmap vinculado se ordenarán desde el acceso menos reciente al acceso más reciente.

Creación de LinkedHashMap desde otros mapas

Así es como podemos crear un mapa hash vinculado que contenga todos los elementos de otros mapas.

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

Salida

 LinkedHashMap1: (Dos = 2, Cuatro = 4) LinkedHashMap2: (Dos = 2, Cuatro = 4, Tres = 3) 

Métodos de LinkedHashMap

La LinkedHashMapclase proporciona métodos que nos permiten realizar varias operaciones en el mapa.

Insertar elementos en LinkedHashMap

  • put() - inserta la asignación de clave / valor especificada en el mapa
  • putAll() - inserta todas las entradas del mapa especificado en este mapa
  • putIfAbsent() - inserta la asignación de clave / valor especificada en el mapa si la clave especificada no está presente en el mapa

Por ejemplo,

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

Salida

 LinkedHashMap original: (Dos = 2, Cuatro = 4) LinkedHashMap actualizado: (Dos = 2, Cuatro = 4, Seis = 6) Nuevo LinkedHashMap: (Uno = 1, Dos = 2, Cuatro = 4, Seis = 6) 

Acceder a los elementos de LinkedHashMap

1. Usando entrySet (), keySet () y values ​​()

  • entrySet() - devuelve un conjunto de todo el mapeo clave / valor del mapa
  • keySet() - devuelve un conjunto de todas las claves del mapa
  • values() - devuelve un conjunto de todos los valores del mapa

Por ejemplo,

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

Salida

 LinkedHashMap: (Uno = 1, Dos = 2, Tres = 3) Asignaciones clave / valor: (Uno = 1, Dos = 2, Tres = 3) Claves: (Uno, Dos, Tres) Valores: (1, 2, 3 ) 

2. Usando get () y getOrDefault ()

  • get()- Devuelve el valor asociado con la clave especificada. Si no se encuentra la clave, regresa null.
  • getOrDefault()- Devuelve el valor asociado con la clave especificada. Si no se encuentra la clave, devuelve el valor predeterminado especificado.

Por ejemplo,

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

Salida

 LinkedHashMap: (Uno = 1, Dos = 2, Tres = 3) Número devuelto: 3 Número devuelto: 5 

Elementos de LinkedHashMap eliminados

  • remove(key) - devuelve y elimina la entrada asociada con la clave especificada del mapa
  • remove(key, value) - elimina la entrada del mapa solo si la clave especificada se asigna para ser el valor especificado y devuelve un valor booleano

Por ejemplo,

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

Salida

LinkedHashMap: (Uno = 1, Dos = 2, Tres = 3) Valor eliminado: 2 ¿Se eliminó la entrada (Tres = 3)? Verdadero LinkedHashMap actualizado: (Uno = 1)

Otros métodos de LinkedHashMap

Método Descripción
clear() elimina todas las entradas del mapa
containsKey() comprueba si el mapa contiene la clave especificada y devuelve un valor booleano
containsValue() comprueba si el mapa contiene el valor especificado y devuelve un valor booleano
size() devuelve el tamaño del mapa
isEmpty() comprueba si el mapa está vacío y devuelve un valor booleano

LinkedHashMap vs. HashMap

Tanto el LinkedHashMapcomo el HashMapimplementan la Mapinterfaz. Sin embargo, existen algunas diferencias entre ellos.

  • LinkedHashMapmantiene internamente una lista doblemente enlazada. Debido a esto, mantiene el orden de inserción de sus elementos.
  • La LinkedHashMapclase requiere más almacenamiento que HashMap. Esto se debe a que LinkedHashMapmantiene listas vinculadas internamente.
  • El rendimiento de LinkedHashMapes más lento que HashMap.

Articulos interesantes...