8.6.8 EnumMap实现类

8.6.8 EnumMap实现类

EnumMap是一个与枚举类一起使用的Map实现, EnumMap中的所有key都必须是单个枚举类的枚举值。创建EnumMap时必须显式或隐式指定它对应的枚举类。

EnumMap特征

EnumMap具有如下特征:

存储结构 数组

EnumMap在内部以数组形式保存,所以这种实现形式非常紧凑、高效

按枚举值的定义顺序排序

EnumMap根据key的自然顺序(即枚举值在枚举类中的定义顺序)来维护key-value对的顺序。当程序通过keySetentrySet()values()等方法遍历EnumMap时可以看到这种顺序。

key不可以为null,value可以为null

EnumMap**不允许使用null作为key,但允许使用null作为value**。

  • 如果试图使用null作为key时将抛出NullPointerException异常。
  • 如果只是查询是否包含值为nullkey,或只是删除值为nullkey,都不会抛出异常

创建EnumMap时必须指定枚举类

与创建普通的Map有所区别的是,创建EnumMap时必须指定一个枚举类,从而将该EnumMap和指定枚举类关联起来。

程序 EnumMap示例

下面程序示范了EnumMap的用法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.*;

enum Season
{
SPRING,SUMMER,FALL,WINTER
}
public class EnumMapTest
{
public static void main(String[] args)
{
// 创建EnumMap对象,该EnumMap的所有key都是Season枚举类的枚举值
EnumMap enumMap = new EnumMap(Season.class);
enumMap.put(Season.SUMMER , "夏日炎炎");
enumMap.put(Season.SPRING , "春暖花开");
System.out.println(enumMap);
}
}

上面程序中创建了一个EnumMap对象,创建该EnumMap对象时指定它的key只能是Season枚举类的枚举值。如果向该EnumMap中添加两个key-value对后,这两个key-value对将会以Season枚举值的自然顺序排序
编译、运行上面程序,看到如下运行结果:

1
{SPRING=春暖花开, SUMMER=夏日炎炎}

总结

  • 创建EnumMap是就需要传入枚举的class对象
  • EnumMap中的key只能是Season枚举类的枚举值.
  • 放入EnumMap中的枚举值对按其在枚举类中定义的顺序排序