我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么使用Java中的EnumMap

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么使用Java中的EnumMap

这篇文章主要讲解了“怎么使用Java中的EnumMap”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Java中的EnumMap”吧!

提到Java中集合Map,你可能常用的是HashMap/ConcurrentHashMap,但是当Map的key是枚举类型时,是否想过使用EnumMap了?

那么当key是枚举类型时,EnumMap和HashMap的区别是啥?

  • HashMap:使用Hash表存储,底层是数组,数组中存的是entry对象,默认长度是16。也就说每次向Map中加入对象,首先根据key值计算hash值,然后根据数组长度放到合适的位置,当发生冲突时,使用"开链法",即在冲突位置加入链表;Java8在解决冲突时,又新增了红黑树的解决方案。总体来说,HashMap就是空间换时间的方式来提高访问效率。但是假如我们已知key的所有值时,是否还有必要每次都要计算hash值,然后找位置,解决冲突,甚者扩容了...

  • EnumMap:既然已知了所有key,那么申请已知大小的数组,每次访问时根据枚举变量的ordinal值定位到数组的指定位置,存取即可,这样是不是既高效,且不会浪费存储中间。

下面就进入EnumMap的内部探秘吧

在这里小编建了一个前端学习交流扣扣群:132667127,我自己整理的最新的前端资料和高级开发教程,如果有想需要的,可以加群一起学习交流

主要成员:

public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
   implements java.io.Serializable, Cloneable {
// key值的枚举类型
private final Class<K> keyType;

//根据key值的枚举类型,会预先缓存所有的枚举变量
private transient K[] keyUniverse;


private transient Object[] vals;

//当前map的大小,
private transient int size = 0;
}

使用详解:

假设预先定了这样的Enum对象

public enum  WeekEnum {
   SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
}

构造方法:

// 构造方法使用示例
EnumMap<WeekEnum, String> weekEnumMap = new EnumMap<>(WeekEnum.class);
// 会预先获取所有的枚举值,然后根据枚举值的个数,创建相应大小的数组用来存放value
public EnumMap(Class<K> keyType) {
this.keyType = keyType;
keyUniverse = getKeyUniverse(keyType);
vals = new Object[keyUniverse.length];
}

put方法:

// 检查枚举值类型,然后根据key的序号,将value存入相应下标的数组
public V put(K key, V value) {
       typeCheck(key);

       int index = key.ordinal();
       Object oldValue = vals[index];
       vals[index] = maskNull(value);
       if (oldValue == null)
           size++;
       return unmaskNull(oldValue);
   }

get方法:

// 依然是先校验key值类型,然后根据key的序号去数组的位置取值
public V get(Object key) {
 return (isValidKey(key) ?
         unmaskNull(vals[((Enum<?>)key).ordinal()]) : null);
}

感谢各位的阅读,以上就是“怎么使用Java中的EnumMap”的内容了,经过本文的学习后,相信大家对怎么使用Java中的EnumMap这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么使用Java中的EnumMap

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java中redis怎么使用的

本文介绍了Java中使用Redis的详细指南。它涵盖了以下主题:添加Redis客户端依赖创建Redis连接基本操作(存储、获取、删除键值)数据结构(列表、集合、哈希表)发布/订阅操作管道持续连接故障处理通过遵循这些步骤,开发人员可以在Java应用程序中轻松集成和使用Redis。
java中redis怎么使用的
2024-04-02

Java中的API怎么使用

这篇“Java中的API怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中的API怎么使用”文章吧。1.API
2023-06-29

Java中的Object.getClass()怎么使用

这篇文章主要介绍“Java中的Object.getClass()怎么使用”,在日常操作中,相信很多人在Java中的Object.getClass()怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Jav
2023-06-22

java中的throw怎么使用

在Java中,throw关键字用于手动抛出一个异常。它通常用于方法中,当发生某种错误或条件不满足时,程序员可以使用throw关键字来抛出一个异常。使用throw关键字的语法如下:```throw exception;```其中,except
2023-09-22

Java中的Javassist怎么使用

本文小编为大家详细介绍“Java中的Javassist怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的Javassist怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。开篇说起 AOP
2023-07-05

java中的private怎么使用

在Java中,private是一种访问修饰符,它用于限制类的成员(字段和方法)的访问权限。当一个成员被声明为private时,它只能在同一类中被访问,而在其他类中是不可见的。使用private修饰符可以提供封装性,确保类的私有成员仅能通过类
2023-08-24

Java中的ArrayList怎么使用

这篇文章主要讲解了“Java中的ArrayList怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中的ArrayList怎么使用”吧!1.ArrayList类1.1ArrayL
2023-06-29

java中的redis怎么使用

在Java中使用Redis提供了一种高性能、内存中的存储解决方案。通过Jedis库,开发者可以轻松地建立连接、存储和检索数据。Redis支持多种数据类型,包括字符串、列表、集合和有序集合。事务和发布/订阅功能也受到支持。通过连接池管理,可以提高性能并防止资源泄漏。遵循本文的详细指南,开发者可以熟练地在Java中使用Redis。
java中的redis怎么使用
2024-04-02

怎么使用Java中的BigDecimal

这篇文章主要介绍“怎么使用Java中的BigDecimal”,在日常操作中,相信很多人在怎么使用Java中的BigDecimal问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java中的BigDeci
2023-06-16

java中的abstract怎么使用

在Java中,abstract是一个关键字,用于修饰类、方法和接口。1. 修饰类:- 抽象类是不能被实例化的,只能被继承。- 抽象类可以有构造方法,但是不能通过new关键字直接实例化,只能通过子类继承并实例化。- 抽象类可以包含抽象方法和非
2023-08-30

java中的DateTime怎么使用

这篇文章主要介绍“java中的DateTime怎么使用”,在日常操作中,相信很多人在java中的DateTime怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java中的DateTime怎么使用”的疑
2023-06-29

Java中的static怎么使用

在Java中,static关键字可以用于以下几个方面:1. 静态变量(static variables):静态变量是类的属性,而不是实例的属性。它们在类加载时创建,并且在整个程序运行期间保持不变。可以通过使用类名来访问静态变量,而不需要创建
2023-08-12

java中的replace怎么使用

在Java中,`replace`方法用于替换字符串中的一部分内容。它有两种常见的用法:1. 替换指定字符或字符串:```javaString str = "Hello, world!";String newStr = str.replace
2023-08-15

java中的finalize怎么使用

在Java中,finalize()是一个方法,用于对象在被垃圾收集器回收之前进行清理操作。finalize()方法由垃圾收集器在确定对象没有被引用时调用,但无法保证它被调用的时间和次数。要使用finalize()方法,需要按照以下步骤进行操
2023-08-25

Java中的OkHttp怎么使用

今天小编给大家分享一下Java中的OkHttp怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是OKHttp一般在
2023-06-30

java中的map怎么使用

在Java中,Map是一种用于存储键值对的数据结构,其中每个键都是唯一的。Map接口是Java集合框架中的一部分,它有多个实现类,例如HashMap、TreeMap和LinkedHashMap等。以下是使用Map的一些常见操作:1. 创建M
2023-08-24

Java中的CyclicBarrier怎么使用

在Java中,CyclicBarrier是一个同步工具,它允许一组线程等待彼此达到一个共同的屏障点,然后继续执行。下面是CyclicBarrier的使用方法:1. 创建CyclicBarrier对象,指定等待的线程数量和达到屏障点时需要执行
2023-08-12

java中的Arrays.sort()怎么使用

Arrays.sort()方法用于对数组进行排序,它有多个重载的方法可以使用。以下是其中一种常用的方法的用法:1. 对整型数组进行排序:```javaint[] arr = {5, 2, 8, 1, 9};Arrays.sort(arr);
2023-08-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录