Java中EnumMap的使用解析
EnumMap
EnumMap是一種特殊的 Map,它要求自身所有的鍵來自某個(gè)枚舉類型。由于枚舉的約束(元素和索引的映射關(guān)系與數(shù)組相似),EnumMap 的內(nèi)部可以作為一個(gè)數(shù)組來實(shí)現(xiàn),因此它們的性能非常好,你可以放心地用 EnumMap 來實(shí)現(xiàn)基于枚舉的查詢。
你只能用枚舉中的元素作為鍵來調(diào)用 put() 方法,除此之外,就和調(diào)用一個(gè)普通的 Map 沒什么區(qū)別了。
下面的例子演示了設(shè)計(jì)模式中的命令模式。這種模式由一個(gè)(通常)只包含一個(gè)方法的接口開始,然后為該方法創(chuàng)建多個(gè)具有不同行為的實(shí)現(xiàn)。只需要配置好這些命令對象,程序就會(huì)根據(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); } } }
運(yùn)行結(jié)果如下:
和 EnumSet 一樣,EnumMap 中的元素順序由它們在枚舉中定義的順序決定。
通過 main() 函數(shù)中的末尾部分,可以看到每個(gè)枚舉都有個(gè)鍵,但是值都是 null ,除非在該鍵上調(diào)用過 put() 方法。
相較于常量特定方法 EnumMap 的優(yōu)勢在于:利用 EnumMap ,你可以改變值對象。而你可以看到常量特定方法在編譯時(shí)是不可變的。
正如你在本章稍后會(huì)看到的,EnumMap 支持多路分發(fā)(multiple dispatching),以應(yīng)對多個(gè)類型的枚舉共存且相互影響的各種場景。
到此這篇關(guān)于Java中EnumMap的使用解析的文章就介紹到這了,更多相關(guān)EnumMap的的使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java 取交集方法retainAll的實(shí)現(xiàn)
這篇文章主要介紹了java 取交集方法retainAll的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Java根據(jù)坐標(biāo)經(jīng)緯度計(jì)算兩點(diǎn)距離5種方法及校驗(yàn)經(jīng)緯度是否在圓/多邊形區(qū)域內(nèi)的算法推薦
在項(xiàng)目開發(fā)過程中需要根據(jù)兩地經(jīng)緯度坐標(biāo)計(jì)算兩地間距離,下面這篇文章主要給大家介紹了關(guān)于Java根據(jù)坐標(biāo)經(jīng)緯度計(jì)算兩點(diǎn)距離5種方法以及校驗(yàn)經(jīng)緯度是否在圓/多邊形區(qū)域內(nèi)的算法推薦,需要的朋友可以參考下2023-12-12drools規(guī)則動(dòng)態(tài)化實(shí)踐解析
這篇文章主要為大家介紹了drools規(guī)則動(dòng)態(tài)化實(shí)踐解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02使用@ConfigurationProperties實(shí)現(xiàn)類型安全的配置過程
這篇文章主要介紹了使用@ConfigurationProperties實(shí)現(xiàn)類型安全的配置過程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Java控制臺(tái)實(shí)現(xiàn)猜拳游戲小游戲
這篇文章主要為大家詳細(xì)介紹了Java控制臺(tái)實(shí)現(xiàn)猜拳游戲小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11