Java:Map(三)——EnumMap:Key是枚举类型

HashMap通过计算KeyhashCode(),直接定位到Value在内部数组的索引,所以效率很高。

Key是枚举类型的Map:EnumMap

如果Keyenum类型,那么就可以使用Java集合库提供的一种EnumMap,它在内部以一种紧凑的数组存储Value,并且根据enum类型的Key直接定位到内部数组索引,且不需要计算hashCode(),效率高且没有空间浪费。

例子

假设有一个枚举类DayOfWeek

enum DayOfWeek {
    SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;
}

利用这个枚举类实现一个EnumMap:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Map <DayOfWeek,String> map = new EnumMap<> (DayOfWeek.class);
        map.put(DayOfWeek.MONDAY, "星期一");
        map.put(DayOfWeek.TUESDAY, "星期二");
        map.put(DayOfWeek.WEDNESDAY, "星期三");
        map.put(DayOfWeek.THURSDAY, "星期四");
        map.put(DayOfWeek.FRIDAY, "星期五");
        map.put(DayOfWeek.SATURDAY, "星期六");
        map.put(DayOfWeek.SUNDAY, "星期日");
        System.out.println(map);
        System.out.println(map.get(DayOfWeek.MONDAY));
    }
}

{SUNDAY=星期日, MONDAY=星期一, TUESDAY=星期二, WEDNESDAY=星期三, THURSDAY=星期四, FRIDAY=星期五, SATURDAY=星期六}
星期一

使用EnumMap时,我们总是用Map接口来引用它(正如上文代码中标红的部分)。因此,实际上可以把HashMapEnumMap互换(指的是对EnumMap调用HashMap的方法),在客户端看来没有任何区别。

小结

如果MapKeyenum类型,推荐使用EnumMap,既保证速度又不浪费控件。

使用EnumMap时,根据面向抽象编程原则,应使用Map接口

posted @ 2021-06-18 15:05  ShineLe  阅读(2968)  评论(0)    收藏  举报