Question

Is HashSet<WeakReference<T>> the Set equivalent of WeakHashMap<T>? That is, will entries be automatically deleted when they are no longer referenced?

If not, what is the equivalent?

Was it helpful?

Solution

No, if an object referenced by one of the WeakReferences in the set gets garbage-collected, the WeakReference will still be included in the set and will not be removed automatically, but their referent will be null. A WeakHashMap uses additional code to remove the weakly referenced keys from the map when they're garbage-collected.

A set equivalent of a WeakHashMap is:

Set<T> set = Collections.newSetFromMap(new WeakHashMap<T, Boolean>()); 

As a HashSet also uses a HashMap internally.

BTW: A WeakReference is just an object pointing to an object which may be garbage-collected despite the reference held by the WeakReference. The WeakReference itself will not be garbage-collected until it is not strongly referenced anywhere anymore just like all other objects.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top