Gráfica comparativa
Bases para la comparación | HashMap | LinkedHashMap |
---|---|---|
BASIC | El orden de inserción en HashMap no se conserva. | El orden de inserción se conserva en LinkedHashMap. |
Estructura de datos | HashMap usa HashTable para almacenar mapas. | LinkedHashMap usa HashTable junto con la lista vinculada para almacenar el mapa. |
Extiende / Implementa | HashMap extiende AbstractMap e implementa la interfaz de Map. | LinkedHashMap extiende Hashmap. |
Versión | HashMap fue introducido en JDK 2.0. | LinkedHashMap fue introducido en JDK 4.0. |
Gastos generales | Comparativamente menos gastos generales. | Comparativamente más sobrecarga porque tiene que mantener el orden de las entradas del mapa. |
Definición de HashMap
HashMap es una clase que se utiliza para crear un mapa. Implementa Map Interface. También extiende la clase AbstractMap para que pueda usar una tabla hash para almacenar las entradas en el mapa. Las entradas del mapa son un par donde cada clave está asociada con el valor. La clave en la entrada se usa para recuperar el valor, por lo tanto, la clave debe ser única. Es por eso que no se permiten claves duplicadas en el HashMap. Pero la clave en cada entrada del mapa puede tener un tipo diferente, es decir, las claves en el mapa creado por HashMap pueden ser heterogéneas. La estructura de datos utilizada por HashMap para almacenar un mapa es una tabla hash.
El orden de inserción de las entradas en el HashMap no se conserva. La inserción de entradas en el mapa creado usando HashMap se basa en el código hash calculado por las claves en las entradas. Si por error ingresó una clave duplicada en el HashMap, reemplazará el valor anterior de esa clave con el nuevo valor propuesto y devolverá el valor anterior. Si no se utiliza una clave duplicada y no se ha realizado ninguna sustitución, la clave siempre devuelve Null. Veamos cómo agregar las entradas al mapa hash con el siguiente ejemplo.
Hashmap hm = new Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordan", 200); System.out.println (hm); / * salida * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordan = 200}
Como en el código anterior, puede ver que creé un objeto de HashMap y agregué las entradas utilizando el método de colocación y cuando imprimí el objeto HashMap, las entradas no se imprimen en el orden en que se insertaron. Por lo tanto, no puede pretender que el orden de las entradas en el HashMap volverá. HashMap utiliza todos los métodos de la interfaz de Map y la clase AbstractMap y no introduce ningún método nuevo; Tiene sus propios constructores. La capacidad predeterminada del mapa hash es 16 y la proporción de relleno predeterminada es 0.75 .
Definición de LinkedHashMap
LinkedHashMap también es un uso de clase para crear un mapa. LinkedHashMap extiende la clase HashMap y se introdujo más tarde a HashMap en la versión 4.0 de JDK. Ser la clase secundaria de la clase HashMap LinkedHashMap es exactamente igual que la clase HashMap, incluidos los constructores y los métodos. Pero, LinkedHashMap difiere en el sentido de que mantiene el orden de inserción de las entradas en el mapa. La estructura de datos que usa LinkedHashMap para almacenar el mapa es la lista enlazada y la tabla hash .
Además de los métodos heredados por HashMap, LinkedHashMap introduce un nuevo método que es removeEldestEntry () . Este método se utiliza para eliminar la entrada más antigua en el mapa. La capacidad predeterminada de LinkedHashMap es 16, y la proporción de relleno predeterminada es 0.75, que también es similar a la clase HashMap.
Diferencias clave entre HashMap y LinkedHashMap en Java
- La diferencia más importante es que el orden de inserción de HashMap no se conserva, mientras que el orden de inserción de LinkedHashMap se conserva .
- La estructura de datos utilizada por HashMap para almacenar los elementos del mapa es Hashtable . Por otro lado, la estructura de datos utilizada por LinkedHashMap es la lista vinculada y Hashtable .
- La clase HashMap extiende la clase AbstractMap e implementa la interfaz Map . Sin embargo, la clase LinkedHashMap es una clase secundaria de la clase HashMap, es decir, la clase LinkedHashMap extiende la clase HashMap.
- La clase HashMap se introdujo en la versión JDK 2.0 . La clase LinkedHashMap se introdujo más adelante en la versión JDK 4.0 .
- Comparativamente, la clase LinkedHashMap tiene más sobrecarga que HashMap, ya que debe mantener el orden de los elementos insertados en el mapa.
Conclusión:
LinkedHashMap solo debe usarse cuando nos preocupa la secuencia de los elementos insertados en el mapa.