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接口。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性