高效处理枚举键值对: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的更多相关文章

  1. Java集合框架:EnumMap

    EnumMap定义 package java.util; import java.util.Map.Entry; import sun.misc.SharedSecrets; public class ...

  2. Java集合概述

    容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用.要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系. String str = ...

  3. Java集合容器简介

    Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...

  4. Java集合框架总结

    java集合框架主要分为实现了Collection接口的List和Set.映射接口Map. |-- List 有序,元素都有索引,可重复. |-- Set 无序,不可以存储重复的元素. |-- Map ...

  5. Java基础19:Java集合框架梳理

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  6. java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类

    本文关键词: java集合框架  框架设计理念  容器 继承层级结构 继承图 集合框架中的抽象类  主要的实现类 实现类特性   集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...

  7. Java集合(Collection)综述

    1.集合简介 数学定义:一般地,我们把研究对象统称为元素.把一些元素组成的总体叫做集合. java集合定义:集合就是一个放数据的容器,准确的说是放数据对象引用的容器. java中通用集合类存放于jav ...

  8. Java集合--概述

    目录 Java集合--概述 摘要 图示 正文 Java集合--概述 摘要 ​ 本文主要介绍集合的整体概念,并作为接下来Java集合实现类讲解的索引. 图示 ​ 这是在网上看到了这样一张图,感觉很清晰, ...

  9. Java 性能调优指南之 Java 集合概览

    [编者按]本文作者为拥有十年金融软件开发经验的 Mikhail Vorontsov,文章主要概览了所有标准 Java 集合类型.文章系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文: 本 ...

  10. Java 集合框架(常用数据结构)

    早在Java 2中之前,Java就提供了特设类.比如:向量(Vector).栈(Stack).字典(Dictionary).哈希表(Hashtable)这些类(数据结构)用来存储和操作对象组.虽然这些 ...

随机推荐

  1. cmake 简易教程

    CMake 是一个跨平台的.开源的构建工具.cmake 是 makefile 的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量,目前很多开源的 ...

  2. 布局控件:Grid和StackPanel

    布局控件:Grid和StackPanel 本文同时为b站WPF课程的笔记,相关示例代码 一个窗口顶上的部分叫做非客户区,下面的部分叫做客户区域.非客户区域主要就是一个Title和三个窗口样式按钮.我们 ...

  3. JXOI2021游记

    JXOI2021游记 day0 虽然说退役的概率比较大,但是我不想.唉,这也不是说不想就可以避免的事情呐-- 总之我希望我稳一点就好-- day1 考场上 依照教练说的,先把三道题都看完再动笔. 看T ...

  4. DeepSeek LLM

    作者前言: DeepSeek系列现在非常火,笔者决定主要梳理DeepSeekzui最重要的四代版本: DeepSeek-LLM; DeepSeekMath; DeepSeek-V2; DeepSeek ...

  5. 线程池中execute和submit的区别?

    简要回答 execute只能提交Runnable类型的任务,无返回值.submit既可以提交Runnable类型的任务,也可以提交Callable类型的任务,会有一个类型为Future的返回值,但当任 ...

  6. A0-Z9

    首位字母A-Z,第二位数字0-9,组流水号. 将字母转成ascii 码,拼接数字,组成一个三位数字. 将这个三位的数字+1,再把这个三位数前两位转回字母,重新拼接出字母+数字 REPORT zlyte ...

  7. 一看就懂!任务提交的资源判断在Taier中的实践

    Taier 介绍 Taier 是袋鼠云开源项目之一,是一个分布式可视化的DAG任务调度系统. 旨在降低ETL开发成本.提高大数据平台稳定性,大数据开发人员可以在 Taier 直接进行业务逻辑的开发,而 ...

  8. 香港CN2优化线路带宽低延迟VPS服务器推荐

    原文:https://ichochy.com/posts/20231120.html CN2 CN2,中国电信下一代承载网(ChinaNetNextCarryingNetwork).CN2是一个多业务 ...

  9. git ---多用户管理

    一.概述 ​ 相信大家都遇到过这样的问题,实际开发中需要在一台PC上用到 不同平台git的账号甚至同一个平台的多个账号(比如本人gitee .字自己在nas上搭建的gitea ,另外还有github账 ...

  10. dotnet 代码调试方法

    本文将会从基础到高级,从简单到复杂的顺序,告诉大家如何调试 dotnet 系应用,特别是桌面端应用.本文将会向大家介绍使用 VisualStudio 大量的功能用来提高调试效率,穿插着也会介绍一些好用 ...