Java中EnumMap的使用解析
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根據(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使用@ConfigurationProperties實現(xiàn)類型安全的配置過程
這篇文章主要介紹了使用@ConfigurationProperties實現(xiàn)類型安全的配置過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02