【发布时间】:2014-05-19 13:48:40
【问题描述】:
我需要一个Map 实现,它共享IdentityHashMap 和WeakHashMap 的属性(引用相等而不是equals() 和键上的弱引用)。
您推荐哪种实现方式(必须在 Android 上运行)?
【问题讨论】:
-
IdentityHashMap<WeakReference<K>, V>? -
@fge 我在想,但是当它被收集时,它不会从地图中删除它。
-
@assylias 呃好吧,我明白了问题...然后
WeakHashMap<Equivalence.Wrapper<K>, V>可以解决问题(使用Equivalence.identity()),但这需要番石榴并使用.wrap()插入密钥 -
map.get(new Wrapper(t));应该可以工作。 -
对于我读过这些 cmets 的漫游程序员 - 不要使用 fge 的解决方案 - 它不起作用。它可能看起来像它,但它已经坏了。这就是为什么 -
WeakHashMap将指向Equivalence.Wrapper<K>而不是K因此在收集Equivalence.Wrapper<K>时将删除密钥,而不是在收集K时删除。Equivalence.Wrapper<K>可能(并且很可能会)被收集,而K仍然存在。
标签: java android map weak-references referenceequals