欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中EnumMap的使用解析

 更新時間:2023年11月08日 08:34:59   作者:一只小熊貓呀  
這篇文章主要介紹了Java中EnumMap的使用解析,EnumMap?是一種特殊的?Map,它要求自身所有的鍵來自某個枚舉類型,EnumMap?的內(nèi)部可以作為一個數(shù)組來實現(xiàn),因此它們的性能非常好,你可以放心地用?EnumMap?來實現(xiàn)基于枚舉的查詢,需要的朋友可以參考下

EnumMap

EnumMap是一種特殊的 Map,它要求自身所有的鍵來自某個枚舉類型。由于枚舉的約束(元素和索引的映射關(guān)系與數(shù)組相似),EnumMap 的內(nèi)部可以作為一個數(shù)組來實現(xiàn),因此它們的性能非常好,你可以放心地用 EnumMap 來實現(xiàn)基于枚舉的查詢。

你只能用枚舉中的元素作為鍵來調(diào)用 put() 方法,除此之外,就和調(diào)用一個普通的 Map 沒什么區(qū)別了。

下面的例子演示了設(shè)計模式中的命令模式。這種模式由一個(通常)只包含一個方法的接口開始,然后為該方法創(chuàng)建多個具有不同行為的實現(xiàn)。只需要配置好這些命令對象,程序就會根據(jù)需要來調(diào)用它們。

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);
        }
    }
}

運行結(jié)果如下:

在這里插入圖片描述

和 EnumSet 一樣,EnumMap 中的元素順序由它們在枚舉中定義的順序決定。

通過 main() 函數(shù)中的末尾部分,可以看到每個枚舉都有個鍵,但是值都是 null ,除非在該鍵上調(diào)用過 put() 方法。

相較于常量特定方法 EnumMap 的優(yōu)勢在于:利用 EnumMap ,你可以改變值對象。而你可以看到常量特定方法在編譯時是不可變的。

正如你在本章稍后會看到的,EnumMap 支持多路分發(fā)(multiple dispatching),以應(yīng)對多個類型的枚舉共存且相互影響的各種場景。

到此這篇關(guān)于Java中EnumMap的使用解析的文章就介紹到這了,更多相關(guān)EnumMap的的使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 取交集方法retainAll的實現(xiàn)

    java 取交集方法retainAll的實現(xiàn)

    這篇文章主要介紹了java 取交集方法retainAll的實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 基于JAVA中的四種JSON解析方式詳解

    基于JAVA中的四種JSON解析方式詳解

    這篇文章主要介紹了基于JAVA中的四種JSON解析方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Java根據(jù)坐標經(jīng)緯度計算兩點距離5種方法及校驗經(jīng)緯度是否在圓/多邊形區(qū)域內(nèi)的算法推薦

    Java根據(jù)坐標經(jīng)緯度計算兩點距離5種方法及校驗經(jīng)緯度是否在圓/多邊形區(qū)域內(nèi)的算法推薦

    在項目開發(fā)過程中需要根據(jù)兩地經(jīng)緯度坐標計算兩地間距離,下面這篇文章主要給大家介紹了關(guān)于Java根據(jù)坐標經(jīng)緯度計算兩點距離5種方法以及校驗經(jīng)緯度是否在圓/多邊形區(qū)域內(nèi)的算法推薦,需要的朋友可以參考下
    2023-12-12
  • JAVA使用geotools讀取shape格式文件的方法

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

    這篇文章主要介紹了JAVA使用geotools讀取shape格式文件的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2017-01-01
  • java實現(xiàn)菜單樹的示例代碼

    java實現(xiàn)菜單樹的示例代碼

    這篇文章主要為大家詳細介紹了java實現(xiàn)菜單樹的相關(guān)知識,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • drools規(guī)則動態(tài)化實踐解析

    drools規(guī)則動態(tài)化實踐解析

    這篇文章主要為大家介紹了drools規(guī)則動態(tài)化實踐解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 如何解決Maven依賴無法導入的問題

    如何解決Maven依賴無法導入的問題

    本文介紹了如何通過在setting.xml中配置倉庫坐標和在IntelliJ IDEA中進行相關(guān)設(shè)置來提高Maven下載Jar包的速度,首先在setting.xml中找到mirrors標簽進行配置,然后在IntelliJ IDEA的設(shè)置中輸入特定的命令
    2024-10-10
  • 使用@ConfigurationProperties實現(xiàn)類型安全的配置過程

    使用@ConfigurationProperties實現(xiàn)類型安全的配置過程

    這篇文章主要介紹了使用@ConfigurationProperties實現(xiàn)類型安全的配置過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 詳解三種java實現(xiàn)多線程的方式

    詳解三種java實現(xiàn)多線程的方式

    數(shù)據(jù)時代的到來,多線程一直都是比較關(guān)心的問題之一,這篇文章介紹了JAVA實現(xiàn)多線程的三種方法,有需要的朋友可以參考一下
    2015-08-08
  • Java控制臺實現(xiàn)猜拳游戲小游戲

    Java控制臺實現(xiàn)猜拳游戲小游戲

    這篇文章主要為大家詳細介紹了Java控制臺實現(xiàn)猜拳游戲小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評論