Diferencia entre HashMap e IdentityHashMap en Java

HashMap en Java es una clase que forma parte de la colección Java. Implementa la interfaz Map de java. Almacena los datos en forma de par clave y valor. La clave debe ser única, pero el valor puede estar duplicado. Si intenta insertar la clave duplicada, reemplazará el elemento de la clave correspondiente. HashMap es similar a la tabla hash, pero no está sincronizada. Permite almacenar las claves nulas y los valores nulos, pero solo debe haber una clave nula y puede haber cualquier número de valores nulos.

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.

HashMap e IdentityHashMap son las clases que implementan la interfaz Map . Pero son pocas las diferencias que existen entre ellos.

Ejemplo 1: HashMap

Java

// Java program to illustrate
// the working of Java HashMap
// to demonstrate
// internal working difference between them
  
// Importing HashMap class from
// java.util package
import java.util.HashMap;
  
// Class
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
        // Creating an empty HashMap object
        HashMap<Integer, String> map = new HashMap<>();
  
        // Add elements to the map
        // Custom inputs
        map.put(10, "Geeks");
        map.put(20, "for");
        map.put(30, "geeks");
        map.put(40, "welcome");
        map.put(50, "you");
  
        // Printing the size of map
        System.out.println("Size of map is:- "
                           + map.size());
  
        // Printing the HashMap content
        System.out.println("HashMap content: " + map);
  
        // Removing a key 50
        map.remove(50);
  
        // Printing the HashMap after the removal
        System.out.println("HashMap after removal : "
                           + map);
    }
}
Producción

Size of map is:- 5
HashMap content: {50=you, 20=for, 40=welcome, 10=Geeks, 30=geeks}
HashMap after removal : {20=for, 40=welcome, 10=Geeks, 30=geeks}

Ejemplo 2: IdentityHashMap

Java

// Java program to illustrate
// working of IdentityHashmap
// to demonstrate
// internal working difference between them
  
// Importing all classes of
// java.util package
import java.util.*;
  
// Class for iterating IdentityHashMap
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // Creating an empty IdentityHashMap object
        IdentityHashMap<Integer, String> ihmap
            = new IdentityHashMap<Integer, String>();
  
        // Mapping string values to int keys
        // Custom inputs --> Custom mappings
        ihmap.put(10, "Geeks");
        ihmap.put(20, "for");
        ihmap.put(30, "Geeks");
        ihmap.put(40, "Welcomes");
        ihmap.put(50, "You");
  
        // Display the size of IdentityHashMap
        System.out.println("IdentityHashMap size : "
                           + ihmap.size());
  
        // Display 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();
  
        // Condition check using hasNext() method()
  
        // Condition check using hasNext() method holding
        // true if there is any next element remaining
        while (itr.hasNext()) {
  
            // next() method which is used to
            // retrieve the next element
            IdentityHashMap.Entry<Integer, String> entry
                = itr.next();
  
            // Print and display key and value pairs
            // using getKey() method
            System.out.println("Key = " + entry.getKey()
                               + ", Value = "
                               + entry.getValue());
        }
    }
}
Producción

IdentityHashMap size : 5
Initial identity hash map: {10=Geeks, 40=Welcomes, 50=You, 30=Geeks, 20=for}
Key = 10, Value = Geeks
Key = 40, Value = Welcomes
Key = 50, Value = You
Key = 30, Value = Geeks
Key = 20, Value = for

Diferencia entre HashMap e IdentityHashMap en Java

S.NO. _                     mapa hash                                IdentityHashMap
1. HashMap implementa la interfaz del mapa pero no viola el contrato general del mapa. IdentityHashMap también implementa la interfaz Map pero viola intencionalmente el contrato general del mapa.
2.  HashMap usa la igualdad de objetos para comparar la clave y los valores. IdentityHashMap usa la igualdad de referencia para comparar la clave y los valores.
3.  HashMap usa el método hashCode() de la clase HashMap para encontrar la ubicación del depósito. IdentityHashMap no usa el método hashCode() sino que usa el método System.IdentityHashCode() para encontrar la ubicación del depósito.
4. HashMap usa enstringmiento. IdentityHashMap utiliza una tabla hash de sonda de revestimiento simple.
5. Para almacenar de forma segura los objetos en HashMap, las claves deben ser inmutables. IdentityHashMap no requiere que la clave sea inmutable.
6. HashMap tiene un rendimiento ligeramente inferior al de IdentityHashMap. IdentityHashMap funciona mejor que HashMap.

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *