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 @   ShineLe  阅读(2880)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示