Guava Cache之MapMaker

MapMaker: 超级强大的 Map 构造工具
所处的包 package com.google.common.collect
MapMaker 是用来构造 ConcurrentMap 的工具类。为什么可以把 MapMaker 叫做超级强大?看了下面的例子你就知道了。首先,它可以用来构造ConcurrentHashMap:得到线程安全的hashMap

ConcurrentMap<String, Object> map1 = new MapMaker() .concurrencyLevel(8) .makeMap();

对应的源码为

 @Override
  public <K, V> ConcurrentMap<K, V> makeMap() {
    if (!useCustomMap) {
      return new ConcurrentHashMap<K, V>(getInitialCapacity(), 0.75f, getConcurrencyLevel());
    }
    return (nullRemovalCause == null)
        ? new MapMakerInternalMap<K, V>(this)
        : new NullConcurrentMap<K, V>(this);
  }

构造用各种不同 reference 作为 key 和 value 的 Map:

ConcurrentMap<String, Object> map2 = new MapMaker() 
        .weakValues() 
        .makeMap();

构造有自动移除时间过期项的 Map:存放30秒后移除,可以用于存放请求的场景

ConcurrentMap<String, Object> map3 = new MapMaker() 
        .expireAfterWrite(30, TimeUnit.SECONDS) 
        .makeMap();

构造有最大限制数目的 Map:限制存放数据

//Map size grows close to the 100, the map will evict 
//entries that are less likely to be used again 
 ConcurrentMap<String, Object> map4 = new MapMaker() 
            .maximumSize(100) 
            .makeMap();

提供当 Map 里面 get 不到数据,它能够自动加入到 Map 的功能。这个功能当 Map 作为缓存的时候很有用 :

ConcurrentMap<String, Object> map5 = new MapMaker() 
        .makeComputingMap( 
          new Function<String, Object>() { 
            public Object apply(String key) { 
              return createObject(key); 
        }
private Object createObject(String key) {
// TODO Auto-generated method stub
      return "";
}});

提供拥有以上所有特性的 Map:

  ConcurrentMap<String, Object> mapAll = new MapMaker() 
        .concurrencyLevel(8) 
        .weakValues() 
        .expireAfterWrite(30, TimeUnit.SECONDS) 
        .maximumSize(100) 
        .makeComputingMap( 
          new Function<String, Object>() { 
            public Object apply(String key) { 
              return createObject(key); 
         }

            private Object createObject(String key) {
                // TODO Auto-generated method stub
                return null;
            }});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 9,714评论 0 16
  • 前言 记录个人在2017年08月的学习和总结,不定期更新 2017-08-02 有序的Map HashMap是无序...
    Kevin_ZGJ阅读 3,073评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,562评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,734评论 25 709
  • 还是那句老话,只提想法,不论证可行性。 ■ 关于官方专题的审稿 我时常会遇到这样的情况,投《首页投稿》被拒,后来又...
    逸之阅读 4,196评论 6 6