使用谷歌收藏MapMaker?

Emi*_*mil 8 java map guava

我刚刚在SO中看到了这个答案,其中提到Google收藏的MapMaker非常棒.我浏览了文档,但无法弄清楚我可以在哪里使用它.任何人都可以指出某些情况会在哪里适合使用MapMaker.

Col*_*inD 12

这是我用过的一种方式的快速示例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);
 }
Run Code Online (Sandbox Code Playgroud)

当get(id)被称为地图上,它会要么返回的Foo是在地图的那个ID或者它会从服务器,它缓存检索它,并将其返回.一旦它成立,我就不必考虑它了.另外,因为我已经设置softValues(),缓存可以不填,并导致记忆问题,因为该系统能够从它清除响应内存需求条目.但是,如果从地图中清除了缓存的值,它可以在下次需要时再次询问服务器!

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