Otro caso útil para WeakHashMapy WeakReferencees una implementación de registro de escucha .
Cuando crea algo que quiere escuchar ciertos eventos, generalmente registra un oyente, por ejemplo
manager.registerListener(myListenerImpl);
Si manageralmacena su oyente con a WeakReference, eso significa que no necesita eliminar el registro, por ejemplo, con un manager.removeListener(myListenerImpl)porque se eliminará automáticamente una vez que su oyente o su componente que lo tiene no esté disponible.
Por supuesto, aún puede eliminar manualmente su escucha, pero si no lo hace o lo olvida, no causará una pérdida de memoria y no evitará que su escucha se recolecte basura.
¿Dónde WeakHashMapentra en escena?
El registro de oyentes que desea almacenar oyentes registrados como WeakReferences necesita una colección para almacenar estas referencias. No hay WeakHashSetimplementación en la biblioteca estándar de Java solo a WeakHashMappero podemos usar fácilmente la última para "implementar" la funcionalidad de la primera:
Set<ListenerType> listenerSet =
Collections.newSetFromMap(new WeakHashMap<ListenerType, Boolean>());
Con esto listenerSetpara registrar un nuevo oyente, solo tiene que agregarlo al conjunto, e incluso si no se elimina explícitamente, si el oyente ya no está referenciado, la JVM lo eliminará automáticamente.