返回顶部
首页 > 资讯 > 前端开发 > html >怎么使用Java中的EnumMap
  • 365
分享到

怎么使用Java中的EnumMap

2024-04-02 19:04:59 365人浏览 八月长安
摘要

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

这篇文章主要讲解了“怎么使用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这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 怎么使用Java中的EnumMap

本文链接: https://lsjlt.com/news/85112.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么使用Java中的EnumMap
    这篇文章主要讲解了“怎么使用Java中的EnumMap”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Java中的EnumMap”吧!提到Java中集...
    99+
    2024-04-02
  • 怎么使用java中的redis
    怎么使用java中的redis?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。第一步在我们的电脑上安装好redis之后,进去redis目录,双击...
    99+
    2024-04-02
  • Java中的Object.getClass()怎么使用
    这篇文章主要介绍“Java中的Object.getClass()怎么使用”,在日常操作中,相信很多人在Java中的Object.getClass()怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Jav...
    99+
    2023-06-22
  • 怎么使用Java中的BigDecimal
    这篇文章主要介绍“怎么使用Java中的BigDecimal”,在日常操作中,相信很多人在怎么使用Java中的BigDecimal问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java中的BigDeci...
    99+
    2023-06-16
  • java中的throw怎么使用
    在Java中,throw关键字用于手动抛出一个异常。它通常用于方法中,当发生某种错误或条件不满足时,程序员可以使用throw关键字来...
    99+
    2023-09-22
    java
  • Java中的ArrayList怎么使用
    这篇文章主要讲解了“Java中的ArrayList怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中的ArrayList怎么使用”吧!1.ArrayList类1.1ArrayL...
    99+
    2023-06-29
  • Java中的API怎么使用
    这篇“Java中的API怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中的API怎么使用”文章吧。1.API...
    99+
    2023-06-29
  • java中的DateTime怎么使用
    这篇文章主要介绍“java中的DateTime怎么使用”,在日常操作中,相信很多人在java中的DateTime怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java中的DateTime怎么使用”的疑...
    99+
    2023-06-29
  • Java中的OkHttp怎么使用
    今天小编给大家分享一下Java中的OkHttp怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是OKHttp一般在...
    99+
    2023-06-30
  • java中的abstract怎么使用
    在Java中,abstract是一个关键字,用于修饰类、方法和接口。1. 修饰类:- 抽象类是不能被实例化的,只能被继承。- 抽象类...
    99+
    2023-08-30
    java abstract
  • Java中的CyclicBarrier怎么使用
    在Java中,CyclicBarrier是一个同步工具,它允许一组线程等待彼此达到一个共同的屏障点,然后继续执行。下面是Cyclic...
    99+
    2023-08-12
    Java CyclicBarrier
  • Java中的static怎么使用
    在Java中,static关键字可以用于以下几个方面:1. 静态变量(static variables):静态变量是类的属性,而不是...
    99+
    2023-08-12
    Java static
  • java中的stringBuilder怎么使用
    在Java中,StringBuilder是一个可变的字符串类,用于构建字符串,提供了很多有用的方法来操作字符串。要使用StringB...
    99+
    2023-08-16
    java stringBuilder
  • java中的Arrays.sort()怎么使用
    Arrays.sort()方法用于对数组进行排序,它有多个重载的方法可以使用。以下是其中一种常用的方法的用法:1. 对整型数组进行排...
    99+
    2023-08-15
    java Arrays.sort()
  • java中的replace怎么使用
    在Java中,`replace`方法用于替换字符串中的一部分内容。它有两种常见的用法:1. 替换指定字符或字符串:```javaSt...
    99+
    2023-08-15
    java replace
  • Java中的Javassist怎么使用
    本文小编为大家详细介绍“Java中的Javassist怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的Javassist怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。开篇说起 AOP ...
    99+
    2023-07-05
  • java中的map怎么使用
    在Java中,Map是一种用于存储键值对的数据结构,其中每个键都是唯一的。Map接口是Java集合框架中的一部分,它有多个实现类,例...
    99+
    2023-08-24
    java map
  • java中的private怎么使用
    在Java中,private是一种访问修饰符,它用于限制类的成员(字段和方法)的访问权限。当一个成员被声明为private时,它只能...
    99+
    2023-08-24
    java private
  • java中的finalize怎么使用
    在Java中,finalize()是一个方法,用于对象在被垃圾收集器回收之前进行清理操作。finalize()方法由垃圾收集器在确定...
    99+
    2023-08-25
    java finalize
  • java中==怎么使用
    java中==怎么使用java中==常用于if语句或三目运算符,比如:if (1 == 2) { } 1 == 2 "true" : "false";在Java中,如果是基本数据类型,则 == 比较的是值;如果是对象类型,则 == 比较...
    99+
    2020-10-17
    java基础 java == 用法
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作