Java中EnumMap的使用解析
作者:一只小熊猫呀
这篇文章主要介绍了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的的使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
