IdentityHashMap, WeakHashMap y EnumMap son todas las clases en la colección Java que implementa la interfaz Map . Pero existen pocas diferencias entre ellos.
1. IdentityHashMap : IdentityHashMap implementa la interfaz Map . Sigue la igualdad de referencia en lugar de la igualdad de objeto al comparar claves (y valores). Esta clase se utiliza cuando el usuario requiere que los objetos se comparen por referencia. No está sincronizado y debe sincronizarse externamente. Los iteradores en esta clase son a prueba de fallas, lanzan ConcurrentModificationException en un intento de modificar durante la iteración.
Funcionamiento de IdentityHashMap:
Java
// Java program to illustrate the // working of IdentityHashmap import java.util.*; public class IteratingIdentityHashMap { public static void main(String[] args) { // Creating an empty IdentityHashMap IdentityHashMap<Integer, String> ihmap = new IdentityHashMap<Integer, String>(); // Mapping string values to int keys ihmap.put(10, "Geeks"); ihmap.put(20, "4"); ihmap.put(30, "Geeks"); ihmap.put(40, "Welcomes"); ihmap.put(50, "You"); // Displaying the size of IdentityHashMap System.out.println("IdentityHashMap size : " + ihmap.size()); // Displaying the IdentityHashMap System.out.println("Initial identity hash map: " + ihmap); // Create an Iterator over the // IdentityHashMap Iterator<IdentityHashMap.Entry<Integer, String> > itr = ihmap.entrySet().iterator(); // The hasNext() method is used to check if there is // a next element The next() method is used to // retrieve the next element while (itr.hasNext()) { IdentityHashMap.Entry<Integer, String> entry = itr.next(); System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } } }
IdentityHashMap size : 5 Initial identity hash map: {10=Geeks, 40=Welcomes, 50=You, 30=Geeks, 20=4} Key = 10, Value = Geeks Key = 40, Value = Welcomes Key = 50, Value = You Key = 30, Value = Geeks Key = 20, Value = 4
2. WeakHashMap: WeakHashMap es la implementación de la interfaz Map que almacena solo claves débiles. En WeakHashMap, podemos almacenar solo referencias débiles de su clave que permiten que los pares clave-valor se recolecten como basura cuando su clave ya no se usa normalmente. WeakHashMap es la implementación basada en HashTable, pero no está sincronizada. Le permite almacenar tanto la clave nula como los valores nulos.
Funcionamiento de WeakHashMap:
Java
// Java program to illustrate // the WeakHashMap import java.util.Collection; import java.util.Map; import java.util.Set; import java.util.WeakHashMap; class WeakHashMapdemo { public static void main(String[] arg) { Map<Number, String> whmap = new WeakHashMap<Number, String>(); whmap.put(1, "geeks"); whmap.put(2, "4"); whmap.put(3, "geeks"); whmap.put(4, "welcomes"); whmap.put(5, "you"); // Displaying weak hash map System.out.println("WeakHashMap is : " + whmap); // Checking if "welcomes" exist if (whmap.containsValue("welcomes")) System.out.println("Yes welcomes exist"); // Checking if 3 exist as a key in map if (whmap.containsKey(3)) System.out.println("Yes 3 exist"); // Creating set for key Set keyset = whmap.keySet(); // Displaying key set System.out.println("key Set : " + keyset); Collection values = whmap.values(); // Displaying values of map System.out.println("Values : " + values); // Removing all data whmap.clear(); // Checking whether map is empty or not if (whmap.isEmpty()) System.out.println("Empty WeakHashMap: " + whmap); } }
WeakHashMap is : {5=you, 4=welcomes, 3=geeks, 2=4, 1=geeks} Yes welcomes exist Yes 3 exist key Set : [5, 4, 3, 2, 1] Values : [you, welcomes, geeks, 4, geeks] Empty WeakHashMap: {}
3. EnumMap : EnumMap es una implementación especializada de la interfaz Map para tipos de enumeración . Extiende AbstractMap e implementa la interfaz Map en Java. Algunas características importantes de EnumMap son las siguientes:
- La clase EnumMap es miembro de Java Collections Framework y no está sincronizada.
- EnumMap es una colección ordenada, y se mantienen en el orden natural de sus claves (el orden natural de las claves significa el orden en el que se declaran las constantes de enumeración dentro del tipo de enumeración)
- EnumMap es mucho más rápido que HashMap .
- Todas las claves de cada instancia de EnumMap deben ser claves del mismo tipo de enumeración .
- EnumMap no permite insertar una clave nula si intentamos insertar la clave nula, arrojará NullPointerException .
- EnumMap se representa internamente como arrays, por lo que ofrece el mejor rendimiento.
Funcionamiento de EnumMap:
Java
// Java program to illustrate working // of EnumMap import java.util.*; class EnumMapExample { public enum Months { January, February, March, April; } public static void main(String[] args) { // Creating an EnumMap of the Days enum EnumMap<Months, Integer> enumMap = new EnumMap<>(Months.class); // Insert using put() method enumMap.put(Months.January, 31); enumMap.put(Months.February, 28); enumMap.put(Months.March, 31); enumMap.put(Months.April, 30); // Printing size of EnumMap System.out.println("Size of EnumMap: " + enumMap.size()); // Printing the EnumMap for (Map.Entry m : enumMap.entrySet()) { System.out.println(m.getKey() + " " + m.getValue()); } } }
Size of EnumMap: 4 January 31 February 28 March 31 April 30
Diferencia entre IdentityHashMap, WeakHashMap y EnumMap:
PROPIEDADES | IdentityHashMap | WeakHashMap | EnumMap |
---|---|---|---|
Referencias | IdentityHashMap almacena una referencia clave sólida. | WeakHashMap almacena la referencia de clave débil. | EnumMap almacena la referencia clave fuerte. |
Buscar y obtener los valores | Utiliza el operador de igualdad (==) para buscar y obtener los valores. | Utiliza el método equals() para ese propósito. | También usa el método equals() para ese propósito. |
Llaves | Permite almacenar cualquier tipo de llaves. | También permite almacenar cualquier tipo de llaves. | Permite almacenar solo claves de tipo enumeración. |
Estructura de datos subrayada | Utiliza la array como una estructura de datos subrayada. | Utiliza HashTable como una estructura de datos subrayada. | Utiliza la array como una estructura de datos subrayada. |
iterador | El iterador utilizado en IdentityHashMap es Fail-fast. | El iterador utilizado en WeakHashMap es Fail-fast. | El iterador utilizado en EnumMap es débilmente consistente. |
Valores nulos | Permite almacenar valores nulos. | Permite almacenar valores nulos. | No permite almacenar valores nulos |
Publicación traducida automáticamente
Artículo escrito por prashant_srivastava y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA