到本文为止,之前已经介绍过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 |