Guava MapMaker()。weakKeys()。makeMap()vs WeakHashMap

时间:2010-11-17 05:03:26

标签: java guava java.util.concurrent weakhashmap

我们有一个Scala服务器在套接字上使用Protocol Buffers获取节点树,我们需要将附加数据附加到每个节点。

在单线程上下文中,当节点树和关联数据同时删除其强引用时(由于超出范围),是否有任何理由使用带有weakKeys()的Google Guava的MapMaker过度使用WeakHashMap?似乎使用MapMaker,可以支付同步访问权限,在这种情况下不需要。

顺便说一句,如果MapMaker提供对等价设置的访问权限,那么可以选择引用相等但不关心弱引用或软引用。

1 个答案:

答案 0 :(得分:6)

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