有人可以向我解释一下什么时候使用 MapMaker 或 WeakHashMaps 有用吗?

2024-04-23

我读过很多人非常喜欢MapMaker http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect/MapMaker.htmlGoogle Guava(集合),但是我看不到它有任何好的用途。

我读过javadoc,它说它的行为就像并发哈希映射 http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true。它还说new MapMaker().weakKeys().makeMap()几乎总是可以用作弱哈希映射 http://download.oracle.com/javase/6/docs/api/java/util/WeakHashMap.html?is-external=true.

但是,阅读 javadocs并发哈希映射 http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true and 弱哈希映射 http://download.oracle.com/javase/6/docs/api/java/util/WeakHashMap.html?is-external=true让我想知道什么时候使用它有用?在我看来,你不能保证你在地图上放入的任何东西都会在那里,还是我误解了?


事情是关于MapMaker重要的是,您构建的地图类型有多种选择,这使得这些地图能够满足多种用途。

  • Dirk 给出了弱键使用的一个很好的例子。
  • 软值对于缓存很有用,因为您可以在映射中缓存值,而不必担心内存不足,因为如果需要内存,系统可以自由地从缓存中逐出条目。
  • 您可以选择让条目在一段时间后过期。这对于缓存也很有用,因为您可能希望在执行昂贵的更新操作之前将某些数据缓存特定的时间段。
  • 我最喜欢的事情之一是制作计算地图。计算图使用Function<K, V>如果映射中尚不存在与给定键关联的值,则自动检索该值。这与软值和/或过期时间很好地结合在一起。在映射驱逐条目后(由于内存需求或过期),下次请求与该键关联的值时,它将自动检索并再次缓存在映射中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有人可以向我解释一下什么时候使用 MapMaker 或 WeakHashMaps 有用吗? 的相关文章

随机推荐