美文网首页
EnumMap小抄

EnumMap小抄

作者: 上海马超23 | 来源:发表于2017-07-06 23:41 被阅读0次
public class EnumMap {
  
  // 存放value的是数组,这点类似List,但更具可读性
  private transient Object[] vals;

  public EnumMap(Class<K> keyType) {
        this.keyType = keyType;
        keyUniverse = getKeyUniverse(keyType);
        // vals数组的容量就是枚举的数量
        vals = new Object[keyUniverse.length];
    }

   public V put(K key, V value) {
        typeCheck(key);
        
        // 枚举的ordinal作为value数组的检索下标
        int index = key.ordinal();
        Object oldValue = vals[index];
        
        vals[index] = maskNull(value);
        if (oldValue == null)
            size++;
        return unmaskNull(oldValue);
    }

    // 为啥用Object而不用泛型K
   // 因为如果K定义成 ?extends XXXEnum, 那么是没法传入参数了,无论是 XXXEnum的子类还是XXXEnum
    // 具体原因可以参考 http://blog.csdn.net/hengyunabc/article/details/7696432
    // PS:类似Animal接口List<Animal> 和 实现类List<Dog>,不是父子关系的,只有List<? extends Animal>才行
    // 具体参考 https://stackoverflow.com/questions/2575363/generics-list-extends-animal-is-same-as-listanimal
    public V get(Object key) {
        // 需要先校验key的类型,没法定义成泛型,原因如上,只能做检查
        return (isValidKey(key) ?
                unmaskNull(vals[((Enum<?>)key).ordinal()]) : null);
    }
}

相关文章

  • EnumMap小抄

  • EnumMap

    如果需要一个Map的实现类,并且键的类型为枚举类型,可以使用一个专门的实现类EnumMap 未完待续。。。

  • Java集合框架3EnumMap

    EnumMap定义 1 以java7进行说明 2 成员属性说明1)EnumMap的键是继承Enum类型的对象2)成...

  • Java1.8-EnumMap源码解析

    一、概述 根据源码英文解释,EnumMap是一种键是枚举类型的Map的实现,而EnumMap的底层实现是通过数组来...

  • EnumSet,EnumMap

    EnumSet 枚举单参数能参与switch case值判断: 测试结果: 每个枚举类型颜色是该Color类的一个...

  • ITEM 37: 使用 ENUMMAP 替代序数索引

    ITEM 37: USE ENUMMAP INSTEAD OF ORDINAL INDEXING  偶尔您可能会看...

  • mmkv源码解析(java)

    一、成员变量 //错误恢复策略相关 private static final EnumMap

  • 生信学习Day6-小白

    mark下小抄-搜索xx小抄-https://www.rstudio.com/resources/cheatshe...

  • 学习小组Day6笔记——四海

    学习R包 R包都有自己的说明书(cheatsheet),俗称小抄。 获取R包小抄的方法 百度XX小抄 找Rstud...

  • Day6-孟思博

    R包小抄的介绍: R包都有自己的说明书(cheatsheet),俗称小抄。在对包有了一定的了解后,小抄是一个很好的...

网友评论

      本文标题:EnumMap小抄

      本文链接:https://www.haomeiwen.com/subject/mjvkhxtx.html