EnumMap是一种特殊的Map,它要求其中的键必须来自于一个enum。枚举映射在内部表示为数组。此表示形式非常紧凑且高效。枚举映射根据其键的自然顺序来维护(该顺序是声明枚举常量的顺序)。enum的每个实例作为一个键总是存在的,但是如果你没有为这个建调用put方法来存入相应的值,其对应值就是空。EnumMap 是不同步的。如果多个线程同时访问一个枚举映射,并且至少有一个线程修改该映射,则此枚举映射在外部应该是同步的。这一般通过对自然封装该枚举映射的某个对象进行同步来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedMap(java.util.Map) 方法来“包装”该枚举。最好在创建时完成这一操作,以防止意外的非同步访问:
Map<EnumKey, V> m
= Collections.synchronizedMap(new EnumMap<EnumKey, V>(...));
下面例子演示了命令设计模式的用法。一般来说,命令模式首先需要一个只有单一方法的接口,然后从该接口实现具有各自不同行为的多个子类。最后,我们就可以构造命令对象,并在需要的时候使用它们。
//: enumerated/EnumMaps.java
// Basics of EnumMaps.
package enumerated;
import java.util.*;
import static enumerated.AlarmPoints.*;
import static net.mindview.util.Print.*;
interface Command {
void action();
}
public class EnumMaps {
public static void main(String[] args) {
EnumMap<AlarmPoints, Command> em = new EnumMap<AlarmPoints, Command>(
AlarmPoints.class);
em.put(KITCHEN, new Command() {
public void action() {
System.out.println("Kitchen fire!");
}
});
em.put(BATHROOM, new Command() {
public void action() {
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(e);
}
}
}
//: enumerated/AlarmPoints.java
package enumerated;
public enum AlarmPoints {
STAIR1, STAIR2, LOBBY, OFFICE1, OFFICE2, OFFICE3, OFFICE4, BATHROOM, UTILITY, KITCHEN
} // /:~
输出结果:
BATHROOM: Bathroom alert!
KITCHEN: Kitchen fire!
java.lang.NullPointerException
分享到:
相关推荐
Java枚举类型是Java语言中一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的方式来表示一组有限的值。枚举在Java中被引入为一个完整的类型,不同于C++中的枚举,这使得Java枚举更加强大且易于使用...
枚举类型还可以用于实现策略模式、状态机等设计模式,提供了比常量类更安全、更灵活的解决方案。 总之,Java的枚举类型`Enum`不仅提供了对常量集的封装,还具备了类的所有功能,包括方法、构造函数和继承。它极大地...
`EnumMap` 是一个专为枚举类型设计的映射容器,其键必须是枚举类型。例如: ```java public static void testEnumMap() { EnumMap, String> currEnumMap = new EnumMap(Light.class); currEnumMap.put(Light.RED,...
最后,`EnumSet`和`EnumMap`是Java专门为枚举类型设计的高效容器。`EnumSet`是一种非常高效的集合,适用于存储枚举值;`EnumMap`则是一种以枚举为键的映射表,性能优于普通`HashMap`。 总之,深入理解并熟练运用...
`EnumMap`则是另一种专门为枚举设计的数据结构,它是`Map`接口的一个实现。与普通`HashMap`相比,`EnumMap`在性能和内存使用上都有优势,因为它的键总是枚举类型,所以不需要进行哈希计算。创建一个`EnumMap`的示例...
这是一种常见的设计模式,用于定义枚举的行为。例如: ```java enum Shape { CIRCLE { @Override void draw() { System.out.println("Drawing a circle"); } }, SQUARE { @Override void draw() { ...
Java 枚举类型 enum 的详解及使用 Java 枚举类型 enum 是 Java 语言中的一种特殊的数据类型,自从 JDK 1.5 引入枚举...在实际编程中,我们可以使用枚举类型来定义常量、遍历枚举类型、使用 EnumMap 和 EnumSet 等。
枚举类型在面向对象程序设计中起到了重要的作用,它提供了类型安全和强大的功能,帮助程序员更好地管理常量集合。以下是对给定文档中涉及的几个关于枚举类型的知识点的详细解释: 1. **枚举作为内部类**: 在题目1...
Java 7增强了枚举类型,提供了`EnumSet`和`EnumMap`,它们针对枚举类型进行了优化,提供了高效且内存友好的数据结构。 10. **并发更新集合(Concurrent Collections Enhancements)** `ConcurrentHashMap`在Java ...
`EnumMap`是一个映射,其中的键是枚举类型,而`EnumSet`则是一个高效、不可变的集合,只包含枚举类型中的元素。 二、反射机制 反射机制允许在运行时检查类的信息,包括类的结构、字段、方法等,并动态创建和访问...
Java中的枚举类型是语言设计中的一个重要特性,它允许开发者定义一组固定的、不可变的值。枚举在Java中提供了比常量更强大且类型安全的机制,它们有自己的类结构和方法,使得处理这些特定值时更加灵活。下面将详细...
EnumMap是HashMap的一个变种,专为枚举类型设计。它的关键特性是所有键必须是同一个枚举类型的实例。这使得EnumMap能够进行更高效的内存管理和查找操作。EnumMap的定义如下: ```java public class EnumMap, V> ...
枚举在集合框架中也有广泛应用,如`java.util.EnumSet`和`java.util.EnumMap`,它们提供了针对枚举类型优化的高效集合实现。 总的来说,Java枚举提供了一种强类型、安全且易于使用的机制来表示固定集合的值。通过...
Java的枚举类型是自Java 1.5版本起引入的一种强大的编程工具,用来替代传统的int常量或String常量来表示一组固定不变的值。枚举类型在保证类型安全和提升代码可读性方面有着显著的优势。下面将详细介绍枚举的定义、...
- 组织枚举:通过枚举可以设计各种状态模式,例如网络连接状态、用户角色等,将相关状态组织在一起。 - 策略枚举:枚举可以用来实现策略模式,每个枚举实例代表一种策略,可以根据需要选择相应的枚举实例执行相应...
枚举还可以用于实现策略模式、枚举工厂模式等多种设计模式,提供更强大的功能和可扩展性。 本视频教程会详细解释枚举的这些特性和用法,通过实例演示如何在实际开发中有效利用枚举,提高代码的可读性和维护性。通过...
在Java编程语言中,枚举(Enum)是一种特殊的类,用于定义一组固定的...在Java EE和Android开发中,枚举也扮演着不可或缺的角色,特别是在设计模式和框架的实现中。因此,掌握枚举的使用是Java程序员必备的技能之一。
简单查询算法,供学习参考。 代码中描述了Enum和EnumMap类的使用。
最简朴枚举模式 使用共有静态 final 域为每个枚举常量导出实例类,提供了编译时类型安全、自动命名空间隔离等优点。 枚举类型的使用指南 在使用枚举类型时,应当遵循以下指南: * 除非迫不得已,把枚举方法导出...
- `EnumSet`和`EnumMap`是专门为枚举设计的高效集合类,它们提供了针对枚举类型优化的操作。 枚举在Java中的应用广泛,尤其是在设计模式中,如工厂模式、策略模式等。使用枚举可以增强代码的可读性和可维护性,...