Hashmap vs WeakHashMap en Java

mapa hash

La clase Java.util.HashMap es una implementación basada en Hashing. En HashMap, tenemos una clave y un par de valores. 
Aunque el objeto se especifica como clave en hashmap, no tiene ninguna referencia y no es elegible para la recolección de basura si está asociado con HashMap, es decir, HashMap domina sobre Garbage Collector.

Java

// Java program to illustrate
// Hashmap
import java.util.*;
class HashMapDemo
{
    public static void main(String args[])throws Exception
    {
        HashMap m = new HashMap();
        Demo d = new Demo();
         
        // puts an entry into HashMap
        m.put(d," Hi ");
         
        System.out.println(m);
        d = null;
         
        // garbage collector is called
        System.gc();
         
        //thread sleeps for 4 sec
        Thread.sleep(4000);
         
        System.out.println(m);
        }
    }
    class Demo
    {
        public String toString()
        {
            return "demo";
        }
         
        // finalize method
        public void finalize()
        {
            System.out.println("Finalize method is called");
        }
}

Producción: 

{demo=Hi}
{demo=Hi}

WeakHashMap

WeakHashMap es una implementación de la interfaz Map. WeakHashMap es casi igual que HashMap, excepto en el caso de WeakHashMap, si el objeto se especifica como clave y no contiene ninguna referencia, es elegible para la recolección de basura aunque esté asociado con WeakHashMap. es decir, Garbage Collector domina sobre WeakHashMap.

Java

// Java program to illustrate
// WeakHashmap
import java.util.*;
class WeakHashMapDemo
{
    public static void main(String args[])throws Exception
    {
        WeakHashMap m = new WeakHashMap();
        Demo d = new Demo();
         
        // puts an entry into WeakHashMap
        m.put(d," Hi ");
        System.out.println(m);
         
        d = null;
         
        // garbage collector is called
        System.gc();
         
        // thread sleeps for 4 sec
        Thread.sleep(4000); .
         
        System.out.println(m);
    }
}
 
class Demo
{
    public String toString()
    {
        return "demo";
    }
     
    // finalize method
    public void finalize()
    {
        System.out.println("finalize method is called");
    }
}

Producción: 

{demo = Hi}
finalize method is called
{ }

Algunas diferencias más importantes entre Hashmap y WeakHashmap: 

  1. Referencias fuertes frente a débiles : los objetos de referencia débiles no son el tipo/clase predeterminado de objeto de referencia y deben especificarse explícitamente al usarlos. Este tipo de referencia se usa en WeakHashMap para hacer referencia a los objetos de entrada. 
    Referencias fuertes: este es el tipo/clase predeterminado de objeto de referencia. Cualquier objeto que tenga una referencia fuerte activa no es elegible para la recolección de elementos no utilizados. En HashMap, los objetos clave tienen fuertes referencias. 
  2. Rol del recolector de basura: recolección de basura: en HashMap, el objeto de entrada (el objeto de entrada almacena pares clave-valor) no es elegible para la recolección de basura, es decir, Hashmap es dominante sobre el recolector de basura. 
    En WeakHashmap, cuando se descarta una clave, su entrada se elimina automáticamente del mapa, en otras palabras, se recolecta la basura.
  3. Implementación del método de clonación : HashMap implementa la interfaz Cloneable. 
    WeakHashMap no implementa una interfaz clonable, solo implementa una interfaz de mapa. Por lo tanto, no existe un método clone() en la clase WeakHashMap.

Este artículo es una contribución de Rishabh Patel . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *