En este tutorial, aprenderemos sobre la clase Java LinkedHashMap y sus operaciones con la ayuda de ejemplos.
La LinkedHashMap
clase del marco de recopilación de Java proporciona la implementación de la tabla hash y la lista vinculada de la interfaz Map.
La LinkedHashMap
interfaz 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.LinkedHashMap
paquete. 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 LinkedHashMap
clase 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 true
se 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 LinkedHashMap
clase 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 mapaputAll()
- inserta todas las entradas del mapa especificado en este mapaputIfAbsent()
- 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 mapakeySet()
- devuelve un conjunto de todas las claves del mapavalues()
- 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, regresanull
.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 maparemove(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 LinkedHashMap
como el HashMap
implementan la Map
interfaz. Sin embargo, existen algunas diferencias entre ellos.
LinkedHashMap
mantiene internamente una lista doblemente enlazada. Debido a esto, mantiene el orden de inserción de sus elementos.- La
LinkedHashMap
clase requiere más almacenamiento queHashMap
. Esto se debe a queLinkedHashMap
mantiene listas vinculadas internamente. - El rendimiento de
LinkedHashMap
es más lento queHashMap
.