Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does exist WeakHashMap, but absent WeakSet?

From J. Bloch

A ... source of memory leaks is listeners ... The best way to ensure that callbacks are garbage collected promptly is to store only weak references to them, for instance, by storing them only as keys in a WeakHashMap.

So, why there isn't any WeakSet in the Java Collections framework?

like image 956
Stan Kurilin Avatar asked Oct 31 '10 11:10

Stan Kurilin


2 Answers

Collections.newSetFromMap

Set<Object> weakHashSet =      Collections.newSetFromMap(         new WeakHashMap<Object, Boolean>()     ); 

As seen in Collections.newSetFromMap documentation, passing a WeakHashMap to get a Set.

like image 174
mart Avatar answered Sep 30 '22 19:09

mart


While you can indeed use Collections.newSetFromMap() to get a WeakSet, it's use cases are actually quite limited.

If you want to implement something like String.intern() you might want to have a look at Guava's Interners.newWeakInterner() functionality instead.

like image 36
Axel Dörfler Avatar answered Sep 30 '22 20:09

Axel Dörfler