我们有一个Scala服务器,该服务器通过套接字使用 Protocol Buffer 获取节点树,我们需要将附加数据附加到每个节点。
在单线程上下文中,并且同时删除节点树和关联数据的强引用(由于超出范围)时,是否有理由使用WeakHashMap而不是将Google Guava的MapMaker与weakKeys()一起使用?似乎使用MapMaker可以为同步访问付费,在这种情况下不需要使用同步访问。
顺便说一句,如果MapMaker允许访问等效设置,则可以选择引用相等,而不关心弱引用或软引用,这将很有用。
最佳答案
WeakHashMap
的一个重要缺点是它不是“身份映射”。也就是说,它在键上使用equals()
和hashCode
(而不是==
和identityHashCode
),对于弱键实际上没有任何意义。您可以通过确保 key 在其equals
方法中使用身份相等来解决此错误。
关于java - Guava MapMaker()。weakKeys()。makeMap()与WeakHashMap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4201674/