WeakHashMap es un tipo de Mapa que usa referencias débiles para almacenar sus claves.
Este tipo de Map puede hacer que su comportamiento no sea predecible en ciertos casos, aunque es muy útil en los casos en los que se usa como caché y nunca nos preocupamos de borrar los datos de ese Map, de modo que crece y crece…
La ventaja para este tipo de solución de un WeakHashMap frente a un HashMap normal es que el primero no se guarda referencias reales a los objetos que tiene almacenados (ni de Persona ni de Coche), por lo que si en nuestra lista de personas (que tenemos aparte) eliminamos una persona y perdemos todas las referencias a ella, el recolector de basura reclamará también la Persona y sus datos guardados en el WeakHashMap.
Si lo hubiéramos metido en un HashMap normal, las referencias a Persona y Coche ahí dentro son reales, por lo que el recolector de basura no los libera. por lo que después de borrar la persona de nuestra lista de personas, debemos además acordarnos de hacer y hacer una llamada al hashmap.remove(persona).
Cuando se usa como Map un WeakHashMap se deben tener en cuenta estas consideraciones:
· La limpieza de las referencias es automática
· Los valores no se eliminan hasta que el WeakHashMap se altera (se hace así para evitar kas ConcurrentModificationExceptions).
· Cada llamada a get() crea un Nuevo objeto WeakReference. Aunque este objeto tiene una corto vida si el get() se usa intensivamente puede crear una sobrecarga.
· WeakHashMap no mantiene un contador del número de elementos.


Deja un comentario