EnumMap 分析

本文介绍了EnumMap的线程不安全性质,并提及通过特定方式创建线程安全的EnumMap。EnumMap在性能上优于HashMap。
摘要由CSDN通过智能技术生成

EnumMap(线程不安全):

   // 声明时首先会再内部根据传入的枚举类型的属性长度,创建等长的数组
   public EnumMap(Class<K> keyType) {
        this.keyType = keyType;
        keyUniverse = getKeyUniverse(keyType);
        vals = new Object[keyUniverse.length];
    }
    public V put(K key, V value) {
        typeCheck(key); // 首先进行类型检查

        int index = key.ordinal(); // 获取枚举类型的ordinal值,直接放到数组的对应index位置
        Object oldValue = vals[index];
        vals[index] = maskNull(value);
        if (oldValue == null)
            size++;
        return unmaskNull(oldValue);
    }
    
    /**
     * 进行类型检查,如果不是添加的key的类型和声明时的类型不一致,抛出类型不一致异常
     * 如果添加的key为null,则抛出NPE;
     */
    private void typeCheck(K key) {
        Class<?> keyClass = key.getClass();
        if (keyClass != keyType && keyClass.getSuperclass() != ke
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值