如何在 Java 中获取带有弱键和身份哈希的 ConcurrentHashMap
?我认为 Google Guava Collections 可以提供这样的东西,但是我可以从标准库中获取它吗?我还有哪些其他选择?
最佳答案
I think Google Guava Collections can give such a thing, but can I get it from the standard library?
对此的简短回答是否定的。Java SE 没有实现这个特定的组合。
您可以使用
WeakReference
键实例化一个java.util.concurrent.ConcurrentHashMap
,并做一些额外的工作来实现删除损坏引用的映射条目,但这不会为您提供身份哈希语义。您可以使用
WeakReference
键实例化一个java.util.IdentityHashMap
,并做一些额外的工作来实现删除损坏引用的映射条目,但是不会给你并发行为。使用
java.util.WeakHashMap
不会为您提供并发或身份哈希。您可以(理论上)将 key 类包装在覆盖自然
equals
和hashcode
方法的内容中。但这很可能无法使用。我认为不可能通过覆盖
ConcurrentHashMap
或IdentityHashMap
中的方法来做到这一点。
也许唯一可行的选择是更改关键类equals
和hashcode
方法以基于身份。但这不适用于“内置”键类型(尤其是 final
键类型)或您在应用程序的其他部分需要基于值的 equals/hashcode 的情况。
关于java - 具有弱键和身份哈希的 ConcurrentHashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15456742/