Java集合——6.使用EnumMap
高效处理枚举键值对:EnumMap
在Java集合框架中,HashMap通过对key计算hashCode()来直接定位value在内部数组的索引,实现了"空间换时间"的高效查找。但当key的类型为枚举(enum)时,还有一种更优的选择——EnumMap。
EnumMap的优势
EnumMap是专门为枚举类型key设计的映射实现,它的优势体现在两个方面:
- 效率高:无需计算
hashCode(),而是直接根据枚举的自然顺序定位到内部数组的索引,查找速度比HashMap更快 - 空间紧凑:内部采用与枚举类型匹配的紧凑数组存储value,不会像
HashMap那样因哈希冲突等问题造成额外空间浪费
EnumMap的示例
以Java内置的DayOfWeek枚举为例,我们可以用EnumMap轻松实现星期几的中英文映射功能:
import java.time.DayOfWeek;
import java.util.*;
public class EnumMapDemo {
public static void main(String[] args) {
// 初始化EnumMap,指定枚举类型
Map<DayOfWeek, String> weekMap = new EnumMap<>(DayOfWeek.class);
// 存入键值对
weekMap.put(DayOfWeek.MONDAY, "星期一");
weekMap.put(DayOfWeek.TUESDAY, "星期二");
weekMap.put(DayOfWeek.WEDNESDAY, "星期三");
weekMap.put(DayOfWeek.THURSDAY, "星期四");
weekMap.put(DayOfWeek.FRIDAY, "星期五");
weekMap.put(DayOfWeek.SATURDAY, "星期六");
weekMap.put(DayOfWeek.SUNDAY, "星期日");
// 操作与普通Map一致
System.out.println("完整映射表:" + weekMap);
System.out.println("星期一对应的枚举:" + weekMap.get(DayOfWeek.MONDAY));
}
}
总结
- 理解
EnumMap的优势和适用场景
Java集合——6.使用EnumMap的更多相关文章
- Java集合框架:EnumMap
EnumMap定义 package java.util; import java.util.Map.Entry; import sun.misc.SharedSecrets; public class ...
- Java集合概述
容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用.要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系. String str = ...
- Java集合容器简介
Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...
- Java集合框架总结
java集合框架主要分为实现了Collection接口的List和Set.映射接口Map. |-- List 有序,元素都有索引,可重复. |-- Set 无序,不可以存储重复的元素. |-- Map ...
- Java基础19:Java集合框架梳理
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类
本文关键词: java集合框架 框架设计理念 容器 继承层级结构 继承图 集合框架中的抽象类 主要的实现类 实现类特性 集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...
- Java集合(Collection)综述
1.集合简介 数学定义:一般地,我们把研究对象统称为元素.把一些元素组成的总体叫做集合. java集合定义:集合就是一个放数据的容器,准确的说是放数据对象引用的容器. java中通用集合类存放于jav ...
- Java集合--概述
目录 Java集合--概述 摘要 图示 正文 Java集合--概述 摘要 本文主要介绍集合的整体概念,并作为接下来Java集合实现类讲解的索引. 图示 这是在网上看到了这样一张图,感觉很清晰, ...
- Java 性能调优指南之 Java 集合概览
[编者按]本文作者为拥有十年金融软件开发经验的 Mikhail Vorontsov,文章主要概览了所有标准 Java 集合类型.文章系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文: 本 ...
- Java 集合框架(常用数据结构)
早在Java 2中之前,Java就提供了特设类.比如:向量(Vector).栈(Stack).字典(Dictionary).哈希表(Hashtable)这些类(数据结构)用来存储和操作对象组.虽然这些 ...
随机推荐
- cmake 简易教程
CMake 是一个跨平台的.开源的构建工具.cmake 是 makefile 的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量,目前很多开源的 ...
- 布局控件:Grid和StackPanel
布局控件:Grid和StackPanel 本文同时为b站WPF课程的笔记,相关示例代码 一个窗口顶上的部分叫做非客户区,下面的部分叫做客户区域.非客户区域主要就是一个Title和三个窗口样式按钮.我们 ...
- JXOI2021游记
JXOI2021游记 day0 虽然说退役的概率比较大,但是我不想.唉,这也不是说不想就可以避免的事情呐-- 总之我希望我稳一点就好-- day1 考场上 依照教练说的,先把三道题都看完再动笔. 看T ...
- DeepSeek LLM
作者前言: DeepSeek系列现在非常火,笔者决定主要梳理DeepSeekzui最重要的四代版本: DeepSeek-LLM; DeepSeekMath; DeepSeek-V2; DeepSeek ...
- 线程池中execute和submit的区别?
简要回答 execute只能提交Runnable类型的任务,无返回值.submit既可以提交Runnable类型的任务,也可以提交Callable类型的任务,会有一个类型为Future的返回值,但当任 ...
- A0-Z9
首位字母A-Z,第二位数字0-9,组流水号. 将字母转成ascii 码,拼接数字,组成一个三位数字. 将这个三位的数字+1,再把这个三位数前两位转回字母,重新拼接出字母+数字 REPORT zlyte ...
- 一看就懂!任务提交的资源判断在Taier中的实践
Taier 介绍 Taier 是袋鼠云开源项目之一,是一个分布式可视化的DAG任务调度系统. 旨在降低ETL开发成本.提高大数据平台稳定性,大数据开发人员可以在 Taier 直接进行业务逻辑的开发,而 ...
- 香港CN2优化线路带宽低延迟VPS服务器推荐
原文:https://ichochy.com/posts/20231120.html CN2 CN2,中国电信下一代承载网(ChinaNetNextCarryingNetwork).CN2是一个多业务 ...
- git ---多用户管理
一.概述 相信大家都遇到过这样的问题,实际开发中需要在一台PC上用到 不同平台git的账号甚至同一个平台的多个账号(比如本人gitee .字自己在nas上搭建的gitea ,另外还有github账 ...
- dotnet 代码调试方法
本文将会从基础到高级,从简单到复杂的顺序,告诉大家如何调试 dotnet 系应用,特别是桌面端应用.本文将会向大家介绍使用 VisualStudio 大量的功能用来提高调试效率,穿插着也会介绍一些好用 ...