Java编程拾遗『EnumMap』

到本文为止,之前已经介绍过HashMap、TreeMap、LinkedHashMap,本篇文章介绍一下集合框架系列最后一种类型的Map——EnumMap。在之前的文章中,我曾介绍过Java API中枚举类的本质(Java编程拾遗『枚举类』),本文讲的EnumMap就是一种key为枚举类型的Map结构。EnumMap类的继承关系如下:

Enum类继承了AbstractMap抽象类,在EnumMap对相应方法做了特别的实现,保证EnumMap key为特定枚举类型,键值对按照枚举类定义的顺序有序。

1. 调用示例

public enum SizeEnum {
    SMALL, MEDIUM, LARGE, EXTRA_LARGE
}
@AllArgsConstructor
@Getter
@Setter
public class Clothe {
    Long id;
    SizeEnum size;
}
public class EnumMapTest {
    public static void main(String[] args) {
        List<Clothe> clothes = Lists.newArrayList();
        clothes.add(new Clothe(1L, SizeEnum.LARGE));
        clothes.add(new Clothe(2L, SizeEnum.EXTRA_LARGE));
        clothes.add(new Clothe(3L, SizeEnum.SMALL));
        clothes.add(new Clothe(4L, SizeEnum.SMALL));

        Map<SizeEnum, Integer> map = new EnumMap<>(SizeEnum.class);
        for (Clothe c : clothes) {
            map.compute(c.getSize(), (k, v) -> (v == null) ? 1 : ++v);
        }

        System.out.println(map);
    }
}

统计Clothe List中,各个Size的数目,运行结果如下:

{SMALL=2, LARGE=1, EXTRA_LARGE=1}

可以看到,EnumMap各键值对之间的顺序跟枚举类定义的顺序一致。

2. 方法说明

2.1 构造函数

S.N. 方法 说明
1 public EnumMap(Class<K> keyType) 声明key类型为keyType的EnumMap
2 public EnumMap(EnumMap<K, ? extends V> m) 通过EnumMap对象初始化一个EnumMap对象
3 public EnumMap(Map<K, ? extends V> m) 通过Map对象初始化一个EnumMap对象,如果Map非EnumMap,则要求key类型为Enum类

2.2 Map接口

除了构造函数之外的方法,全部继承自Map接口,如下:

S.N. 方法 说明
1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值