为什么存在WeakHashMap,但缺lessWeakSet?

从J.布洛赫

一个…内存泄漏的来源是侦听器…确保callback是垃圾回收的最好方法是只存储对它们的弱引用,例如,只将它们作为键存储在WeakHashMap中 。

那么,为什么Java Collections框架中没有任何WeakSet呢?

很简单: WeakHashMap有一些用例(特别是你想用额外属性注释对象的情况),但是WeakSets没有用例。

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

从java.util.Collections中的 javadoc #newSetFromMap(Map)

那么,为什么在java集合框架中没有任何WeakSet呢?

尽pipeWeakHashSet用例可能有限,但是Java类库devise的一部分原则是为了避免在所有可能的用例中使用实用类来填充类库。

还有一些其他类库,包括集合types; Apache Commons Collections和Google Collections(又名Guava)就是很好的例子。 但是, WeakHashSet甚至没有为Apache和Google图书馆“做好准备”。