是HashSet<WeakReference<T>>
Set
相当于WeakHashMap<T>
?也就是说,当条目不再被引用时,它们会自动删除吗?
如果不是,等价的是什么?
最佳答案
不,如果集合中的 WeakReference
之一引用的对象被垃圾回收,WeakReference
仍将包含在集合中并且不会被回收自动删除,但它们的 referent
将为 null
。 WeakHashMap
使用附加代码在垃圾收集时从映射中删除弱引用键。
WeakHashMap
的等价集合是:
Set<T> set = Collections.newSetFromMap(new WeakHashMap<T, Boolean>());
作为一个HashSet
,也在内部使用了一个HashMap
。
顺便说一句:WeakReference
只是一个对象,指向一个可能被垃圾回收的对象,尽管 WeakReference
持有引用。 WeakReference
本身不会被垃圾回收,直到它不再像所有其他对象一样在任何地方被强引用。
关于java - 设置等效于 WeakHashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19367338/