6

我们有一个 Scala 服务器,它通过套接字使用协议缓冲区获取节点树,我们需要将附加数据附加到每个节点。

在单线程上下文中并且当节点树和关联数据都将同时删除其强引用时(由于超出范围),是否有任何理由使用 Google Guava 的 MapMaker 和 weakKeys() 而不是使用 Wea​​kHashMap ? 似乎使用 MapMaker,需要为同步访问付费,在这种情况下不需要。

顺便说一句,如果 MapMaker 提供对等价设置的访问权限,这样人们就可以选择引用相等而不关心弱引用或软引用,这将是有用的。

4

1 回答 1

6

一个重要的缺点WeakHashMap是它不是“身份图”。也就是说,它在键上使用equals()and hashCode(而不是==and identityHashCode),这对于弱键确实没有意义。您可以通过确保您的密钥在其equals方法中使用身份相等来解决此错误。

于 2010-11-20T07:41:43.923 回答