HashSet<WeakReference<T>>
Set
相当于WeakHashMap<T>
?也就是说,当条目不再被引用时会自动删除吗?
如果没有,等同于什么?
答案 0 :(得分:19)
不,如果集合中WeakReference
之一引用的对象被垃圾收集,WeakReference
仍将包含在集合中,并且不会自动删除,但是referent
{ {1}}将null
。 WeakHashMap
使用其他代码在垃圾回收时从地图中删除弱引用的密钥。
等效于WeakHashMap
的集合是:
Set<T> set = Collections.newSetFromMap(new WeakHashMap<T, Boolean>());
由于HashSet
内部也使用HashMap
。
BTW:WeakReference
只是指向一个对象的对象,尽管WeakReference
持有引用,但该对象可能被垃圾收集。 WeakReference
本身不会被垃圾收集,直到它不再被强烈引用,就像所有其他对象一样。