Java中EnumMap的使用解析

 更新时间:2023年11月08日 08:34:59   作者:一只小熊猫呀  
这篇文章主要介绍了Java中EnumMap的使用解析,EnumMap 是一种特殊的 Map,它要求自身所有的键来自某个枚举类型,EnumMap 的内部可以作为一个数组来实现,因此它们的性能非常好,你可以放心地用 EnumMap 来实现基于枚举的查询,需要的朋友可以参考下

EnumMap

EnumMap是一种特殊的 Map,它要求自身所有的键来自某个枚举类型。由于枚举的约束(元素和索引的映射关系与数组相似),EnumMap 的内部可以作为一个数组来实现,因此它们的性能非常好,你可以放心地用 EnumMap 来实现基于枚举的查询。

你只能用枚举中的元素作为键来调用 put() 方法,除此之外,就和调用一个普通的 Map 没什么区别了。

下面的例子演示了设计模式中的命令模式。这种模式由一个(通常)只包含一个方法的接口开始,然后为该方法创建多个具有不同行为的实现。只需要配置好这些命令对象,程序就会根据需要来调用它们。

AlarmPoints.java

public enum AlarmPoints {
    STAIR1, STAIR2, LOBBY, OFFICE1, OFFICE2, OFFICE3,
    OFFICE4, BATHROOM, UTILITY, KITCHEN
}

EnumMaps.java

import java.util.EnumMap;
import java.util.Map;

import static enums.TEST0523.AlarmPoints.*;

interface Command {
    void action();
}

public class EnumMaps {
    public static void main(String[] args) {
        EnumMap<AlarmPoints, Command> em = new EnumMap<>(AlarmPoints.class);
        em.put(KITCHEN,() -> System.out.println("Kitchen fire!"));
        em.put(BATHROOM,() -> System.out.println("Bathroom alert!"));
        for (Map.Entry<AlarmPoints, Command> e : em.entrySet()) {
            System.out.print(e.getKey() + ": ");
            e.getValue().action();
        }
        try {
            // If there's no value for a particular key:
            em.get(UTILITY).action();
        } catch (Exception e) {
            System.out.println("Expected: " + e);
        }
    }
}

运行结果如下:

在这里插入图片描述

和 EnumSet 一样,EnumMap 中的元素顺序由它们在枚举中定义的顺序决定。

通过 main() 函数中的末尾部分,可以看到每个枚举都有个键,但是值都是 null ,除非在该键上调用过 put() 方法。

相较于常量特定方法 EnumMap 的优势在于:利用 EnumMap ,你可以改变值对象。而你可以看到常量特定方法在编译时是不可变的。

正如你在本章稍后会看到的,EnumMap 支持多路分发(multiple dispatching),以应对多个类型的枚举共存且相互影响的各种场景。

到此这篇关于Java中EnumMap的使用解析的文章就介绍到这了,更多相关EnumMap的的使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java 取交集方法retainAll的实现

    java 取交集方法retainAll的实现

    这篇文章主要介绍了java 取交集方法retainAll的实现操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 基于JAVA中的四种JSON解析方式详解

    基于JAVA中的四种JSON解析方式详解

    这篇文章主要介绍了基于JAVA中的四种JSON解析方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Java根据坐标经纬度计算两点距离5种方法及校验经纬度是否在圆/多边形区域内的算法推荐

    Java根据坐标经纬度计算两点距离5种方法及校验经纬度是否在圆/多边形区域内的算法推荐

    在项目开发过程中需要根据两地经纬度坐标计算两地间距离,下面这篇文章主要给大家介绍了关于Java根据坐标经纬度计算两点距离5种方法以及校验经纬度是否在圆/多边形区域内的算法推荐,需要的朋友可以参考下
    2023-12-12
  • JAVA使用geotools读取shape格式文件的方法

    JAVA使用geotools读取shape格式文件的方法

    这篇文章主要介绍了JAVA使用geotools读取shape格式文件的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • java实现菜单树的示例代码

    java实现菜单树的示例代码

    这篇文章主要为大家详细介绍了java实现菜单树的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • drools规则动态化实践解析

    drools规则动态化实践解析

    这篇文章主要为大家介绍了drools规则动态化实践解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 如何解决Maven依赖无法导入的问题

    如何解决Maven依赖无法导入的问题

    本文介绍了如何通过在setting.xml中配置仓库坐标和在IntelliJ IDEA中进行相关设置来提高Maven下载Jar包的速度,首先在setting.xml中找到mirrors标签进行配置,然后在IntelliJ IDEA的设置中输入特定的命令
    2024-10-10
  • 使用@ConfigurationProperties实现类型安全的配置过程

    使用@ConfigurationProperties实现类型安全的配置过程

    这篇文章主要介绍了使用@ConfigurationProperties实现类型安全的配置过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 详解三种java实现多线程的方式

    详解三种java实现多线程的方式

    数据时代的到来,多线程一直都是比较关心的问题之一,这篇文章介绍了JAVA实现多线程的三种方法,有需要的朋友可以参考一下
    2015-08-08
  • Java控制台实现猜拳游戏小游戏

    Java控制台实现猜拳游戏小游戏

    这篇文章主要为大家详细介绍了Java控制台实现猜拳游戏小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11

最新评论