Un autre cas utile pour WeakHashMapet WeakReferenceest une implémentation de registre d'écoute .
Lorsque vous créez quelque chose qui veut écouter certains événements, vous enregistrez généralement un auditeur, par exemple
manager.registerListener(myListenerImpl);
Si le managerstocke votre auditeur avec un WeakReference, cela signifie que vous n'avez pas besoin de supprimer le registre, par exemple avec un manager.removeListener(myListenerImpl)car il sera automatiquement supprimé une fois que votre auditeur ou votre composant contenant l'écouteur devient indisponible.
Bien sûr, vous pouvez toujours supprimer manuellement votre auditeur, mais si vous ne le faites pas ou si vous l'oubliez, cela ne provoquera pas de fuite de mémoire et n'empêchera pas votre auditeur d'être récupéré.
D'où WeakHashMapvient la photo?
Le registre d'écouteurs qui souhaite stocker les écouteurs enregistrés en tant que WeakReferences a besoin d'une collection pour stocker ces références. Il n'y a pas d' WeakHashSetimplémentation dans la bibliothèque standard Java seulement WeakHashMapmais nous pouvons facilement utiliser cette dernière pour "implémenter" la fonctionnalité de la première:
Set<ListenerType> listenerSet =
    Collections.newSetFromMap(new WeakHashMap<ListenerType, Boolean>());
Avec cela listenerSetpour enregistrer un nouvel écouteur il suffit de l'ajouter à l'ensemble, et même s'il n'est pas supprimé explicitement, si l'écouteur n'est plus référencé, il sera automatiquement supprimé par la JVM.