ConcurrentHashMap具有弱键和身份哈希?
问题内容:
如何ConcurrentHashMap
在Java中获得带有弱密钥和身份哈希的?我认为Google Guava
Collections可以提供这种功能,但是我可以从标准库中获取吗?我还有什么其他选择?
问题答案:
我认为Google Guava Collections可以提供这种功能,但是我可以从标准库中获取吗?
对此的简短答案是“否”。Java SE没有实现此特定组合。
-
您可以
java.util.concurrent.ConcurrentHashMap
使用WeakReference
键实例化a ,并做一些额外的工作来实现删除损坏的引用的映射项,但这不会为您提供身份哈希语义。 -
您可以
java.util.IdentityHashMap
使用WeakReference
键实例化a ,并做一些额外的工作来实现删除损坏的引用的映射项,但这不会给您带来并发的行为。 -
使用
java.util.WeakHashMap
不会给您带来并发或身份哈希。 -
您(理论上)可以将键类包装在某种覆盖自然
equals
和hashcode
方法的东西中。但这很可能无法使用。 -
我认为不可能通过覆盖
ConcurrentHashMap
或中的方法来做到这一点IdentityHashMap
。
也许是唯一可行的办法是 改变
的关键类equals
和hashcode
方法基于身份是。但这不适用于“内置”键类型(尤其是键类型final
)或在应用程序的其他部分中需要基于值的equals
/ hashcode的情况。