Sobes.tech
Middle

¿En qué consiste la diferencia entre HashMap y WeakHashMap en Java?

sobes.tech AI

Respuesta de la IA

La principal diferencia radica en cómo manejan sus claves. HashMap utiliza referencias fuertes a las claves, mientras que WeakHashMap utiliza referencias débiles.

HashMap:

  • Utiliza referencias fuertes. Tan pronto como un objeto se coloca como clave en HashMap, el recolector de basura GC no puede eliminar ese objeto mientras HashMap exista y contenga una referencia a esa clave.
  • No es adecuado para almacenar en caché objetos cuyo ciclo de vida debe ser determinado por factores externos, ya que las claves serán "retenidas", impidiendo su recolección.
  • Se usa cuando se necesita garantizar la presencia constante de todas las claves añadidas, hasta que el mapa sea limpiado o los elementos eliminados manualmente.

WeakHashMap:

  • Utiliza referencias débiles a las claves. Si no queda ninguna referencia fuerte al objeto clave fuera de WeakHashMap, el recolector de basura puede recolectarlo, incluso si todavía está presente en WeakHashMap.
  • Cuando una clave es recolectada por el recolector de basura, la entrada correspondiente (par clave-valor) se elimina automáticamente de WeakHashMap. Esto sucede durante operaciones en el mapa (por ejemplo, get, put, remove) o durante la recolección de basura.
  • Es ideal para implementar cachés donde se necesita almacenar objetos, pero sin impedir su eliminación por el recolector de basura si no son utilizados en otro lugar (la referencia débil no mantiene el objeto).
  • La iteración sobre WeakHashMap puede ser incompleta o contener referencias a claves ya recolectadas (aunque las entradas correspondientes serán eliminadas más tarde).

Tabla comparativa:

Característica HashMap WeakHashMap
Tipo de referencia a la clave Fuerte Débil
Recolección de basura de la clave Imposible mientras la clave esté en el mapa y el mapa sea accesible Posible si no hay referencias fuertes externas
Eliminación de entrada Solo manualmente o al limpiar el mapa Manualmente o automáticamente durante la recolección de basura
Aplicabilidad Uso general, cuando las claves deben mantenerse Caché, cuando las claves pueden ser recolectadas por basura
Rendimiento Generalmente estable Puede variar debido a la interacción con GC