Java 使用谷歌地图制作工具?

Java 使用谷歌地图制作工具?,java,map,guava,Java,Map,Guava,我刚刚遇到过这样一个场景,其中提到Google collections非常棒。我浏览了文档,但没有真正弄清楚我可以在哪里使用它。有人能指出一些场景中使用地图制作是合适的吗 如果您查看和的描述,可能会有所帮助 SoftReference对于在缓存中使用非常有用,因为当内存不足时,它们会被特别清除 WeakReference告诉垃圾收集器,只要其他地方没有对它的强引用,它就可以收集引用它的对象。这通常用于可以根据需要快速再次查找的内容 这样,考虑使用MAPMAGER创建一个具有缓存软值的并发映射,以

我刚刚遇到过这样一个场景,其中提到Google collections非常棒。我浏览了文档,但没有真正弄清楚我可以在哪里使用它。有人能指出一些场景中使用地图制作是合适的吗

如果您查看和的描述,可能会有所帮助

SoftReference
对于在缓存中使用非常有用,因为当内存不足时,它们会被特别清除

WeakReference
告诉垃圾收集器,只要其他地方没有对它的强引用,它就可以收集引用它的对象。这通常用于可以根据需要快速再次查找的内容

这样,考虑使用MAPMAGER创建一个具有缓存软值的并发映射,以及一个带有临时查找表的弱键的并发映射。


编辑:softValues使用LRU策略。

这里是我使用的一种方法的快速示例
MapMaker

private final ConcurrentMap<Long, Foo> fooCache = new MapMaker()
    .softValues()
    .makeComputingMap(new Function<Long, Foo>() {
          public Foo apply(Long id) {
            return getFooFromServer(id);
          }
        });

 public Foo getFoo(Long id) {
   return fooCache.get(id);
 }
private final ConcurrentMap fooCache=new MapMaker()
.softValues()
.makeComputingMap(新函数(){
公共Foo应用(长id){
返回getFooFromServer(id);
}
});
公共Foo getFoo(长id){
返回fooCache.get(id);
}
在映射上调用
get(id)
时,它将返回映射中该id的
Foo
,或者从服务器检索它,缓存它,然后返回它。一旦建立起来,我就不必再去想了。另外,由于我已经设置了
softValues()
,缓存无法填满并导致内存问题,因为系统能够根据内存需求清除其中的条目。但是,如果从映射中清除了缓存的值,它可以在下次需要时再次向服务器请求该值


问题是,这只是使用它的一种方式。让地图使用强键、弱键或软键和/或值的选项,再加上在特定时间后删除条目的选项,可以让你用它做很多事情。

请参阅:
getFoo
getFooFromServer
在这里应该是相同的函数吗?@Tom:不,因为调用
fooCache.get(id)
时,如果值不在缓存中,将调用计算映射的
函数。如果
函数
再次调用
getFoo
,它将再次尝试调用
fooCache.get
。也就是说,
getFooFromServer()
的代码可以在
函数中定义,而不是作为一个单独的方法来定义。。。我只是使用了一个命名方法来明确函数的作用,而不必编写任何调用服务器的实际伪代码。