Java:Map(三)——EnumMap:Key是枚举类型
HashMap通过计算Key的hashCode(),直接定位到Value在内部数组的索引,所以效率很高。
Key是枚举类型的Map:EnumMap
如果Key是enum类型,那么就可以使用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接口来引用它(正如上文代码中标红的部分)。因此,实际上可以把HashMap与EnumMap互换(指的是对EnumMap调用HashMap的方法),在客户端看来没有任何区别。
小结
如果Map的Key是enum类型,推荐使用EnumMap,既保证速度又不浪费控件。
使用EnumMap时,根据面向抽象编程原则,应使用Map接口。

浙公网安备 33010602011771号