r.v*_*r.v 17 java concurrency weak-references concurrenthashmap
如何ConcurrentHashMap在Java中获得弱密钥和身份哈希?我认为Google Guava Collections可以提供这样的东西,但是我可以从标准库中获取它吗?我还有其他选择吗?
Ste*_*n C 10
我认为Google Guava Collections可以提供这样的东西,但是我可以从标准库中获取它吗?
简而言之,Java SE并未实现这一特定组合.
您可以java.util.concurrent.ConcurrentHashMap使用WeakReference键实例化一个,并执行一些额外的工作来实现删除已损坏引用的映射条目,但这不会为您提供标识哈希语义.
您可以实例化一个java.util.IdentityHashMap带WeakReference键,并做一些额外的工作来实现删除已损坏引用的映射条目,但这不会给您带来并发行为.
使用a java.util.WeakHashMap不会给你并发或身份哈希.
你可以(在理论上)将关键类包装成超越自然equals和hashcode方法的东西.但这很可能无法使用.
我认为不可能通过覆盖任何一个ConcurrentHashMap或两个方法来做到这一点IdentityHashMap.
也许是唯一可行的办法是改变的关键类equals和hashcode方法基于身份是.但这不适用于"内置"键类型(尤其是final那些)或者在应用程序的其他部分需要基于值的equals/hashcode的情况.