使用EnumMap
2023-02-18 15:28:48 时间
因为HashMap
是一种通过对key计算hashCode()
,通过空间换时间的方式,直接定位到value所在的内部数组的索引,因此,查找效率非常高。
如果作为key的对象是enum
类型,那么,还可以使用Java集合库提供的一种EnumMap
,它在内部以一个非常紧凑的数组存储value,并且根据enum
类型的key直接定位到内部数组的索引,并不需要计算hashCode()
,不但效率最高,而且没有额外的空间浪费。
我们以DayOfWeek
这个枚举类型为例,为它做一个“翻译”功能:
import java.time.DayOfWeek;
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));
}
}
使用EnumMap
的时候,我们总是用Map
接口来引用它,因此,实际上把HashMap
和EnumMap
互换,在客户端看来没有任何区别。
小结
如果Map
的key是enum
类型,推荐使用EnumMap
,既保证速度,也不浪费空间。
使用EnumMap
的时候,根据面向抽象编程的原则,应持有Map
接口。
相关文章
- PE格式:实现ELF结构解析工具
- 通过URL载入ShellCode代码
- 华三H3C无线AC、AP模式与上线解析
- 软件测试|selenium窗口切换
- 记一次synchronized锁字符串引发的坑兼再谈Java字符串
- Java对List分割及使用Spring多线程调用
- Java接口幂等性
- Java 相同类型强制转换异常
- 和付费网盘说再见,跟着本文自己起个网盘(Java 开源项目)
- 有了这个开源 Java 项目,开发出炫酷的小游戏好像不难?
- 超级好用的 Java 数据可视化库:Tablesaw
- 采用开源Zabbix+500块硬件平替5万块动环检测系统,实现UPS、温湿度、烟雾等数据采集、存储、告警、大屏展示
- 驱动开发:WinDBG 常用调试命令总结
- 中小企业快速合规,快速部署开源堡垒机TELEPORT
- 驱动开发:监控进程与线程对象操作
- 客快物流大数据项目(九十六):ClickHouse的VersionedCollapsingMergeTree深入了解
- 软件测试|selenium屏幕操作事件TouchActions
- FPS游戏:视场角矩阵的特点
- Path Finder for Mac(强大的文件管理工具)v2149中文激活版
- 零售行业R公司对接亚马逊Amazon Device EDI项目案例