说说Java中的枚举——EnumMap与EnumSet
为了更好的支持枚举类型,java.util中添加了两个新类:EnumMap和EnumSet。使用它们可以更高效的操作枚举类型。下面我一一介绍给你:
EnumMap是专门为枚举类型量身定做的Map实现。虽然使用其它的Map实现(如HashMap)也能完成枚举类型实例到值得映射,但是使用EnumMap会更加高效:它只能接收同一枚举类型的实例作为键值,并且由于枚举类型实例的数量相对固定并且有限,所以EnumMap使用数组来存放与枚举类型对应的值。这使得EnumMap的效率非常高。
提示:EnumMap在内部使用枚举类型的ordinal()得到当前实例的声明次序,并使用这个次序维护枚举类型实例对应值在数组的位置。
下面是使用EnumMap的一个代码示例。枚举类型DataBaseType里存放了现在支持的所有数据库类型。针对不同的数据库,一些数据库相关的方法需要返回不一样的值,示例中getURL就是一个。
Java代码
|
//现支持的数据库类型枚举类型定义
public enum DataBaseType{
MYSQL,ORACLE,DB2,SQLSERVER
}
//某类中定义的获取数据库URL的方法以及EnumMap的声明。
……
private EnumMap<DataBaseType ,String> urls =
new EnumMap<DataBaseType ,String>(DataBaseType.class);
public DataBaseInfo(){
urls.put(DataBaseType.DB2,"jdbc:db2://localhost:5000/sample");
urls.put(DataBaseType.MYSQL,"jdbc:mysql://localhost/mydb");
urls.put(DataBaseType.ORACLE,"jdbc:oracle:thin:@localhost:1521:sample");
urls.put(DataBaseType.SQLSERVER,"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb");
}
/**
* 根据不同的数据库类型,返回对应的URL
* @param type DataBaseType枚举类新实例
* @return
*/
public String getURL(DataBaseType type){
return this.urls.get(type);
}
|
在实际使用中,EnumMap对象urls往往是由外部负责整个应用初始化的代码来填充的。这里为了演示方便,类自己做了内容填充。
像例子中那样,使用EnumMap可以很方便的为枚举类型在不同的环境中绑定到不同的值上。如:例子中getURL绑定到URL上,在其它的代码中可能又被绑定到数据库驱动上去。
EnumSet是枚举类型的高性能Set实现。它要求放入它的枚举常量必须属于同一枚举类型。EnumSet提供了许多工厂方法以便于初始化,见下表:
EnumSet作为Set接口实现,它支持对包含的枚举常量的遍历:
Java代码
|
for(Operation op : EnumSet.range(Operation.PLUS , Operation.MULTIPLY)) {
doSomeThing(op);
}
|
|
分享到:
相关推荐
【EnumMap和EnumSet详解】 在Java编程中,当我们需要处理特定枚举类型(Enum)作为键(Key)的映射关系时,EnumMap和EnumSet成为两种非常实用的工具类。它们是Java集合框架中专门为枚举类型设计的高效容器,提供了...
这篇博客将深入探讨Java枚举的特性和使用方法,包括`EnumSet`和`EnumMap`这两个与枚举相关的数据结构。 首先,枚举定义的基本语法是`public enum EnumName {constant1, constant2, ...}`。每个枚举常量都是`...
本文总结了Effective Java 中关于枚举与注解的知识点,涵盖了枚举类型的优点、使用指南、避免使用 int 常量、使用 EnumSet 和 EnumMap 等。 枚举类型的优点 枚举类型提供了编译时类型安全、自动命名空间隔离、可以...
EnumMap 和 EnumSet 是 Java 中的两个特殊的集合类,它们都是专门用于枚举类型的集合操作的。例如,我们可以使用 EnumMap 来保存枚举类型的映射关系: ```java EnumMap, String> map = new EnumMap(Light.class); ...
在集合框架中,枚举可用于创建固定大小的集合,如EnumSet和EnumMap。EnumSet是高效且类型安全的集合,适用于存储枚举类型;EnumMap则以枚举类型为键,提供快速访问和操作。 在PPT详解中,可能会详细讲述以下内容: ...
在使用枚举类型时,我们可以使用 EnumMap 和 EnumSet 两个类来操作枚举类型。例如,在上面的示例代码中,我们使用了 EnumMap 来存储一副扑克牌的花色和牌面大小。使用枚举类型可以使我们的代码更加简洁易懂,同时也...
除了基本的定义和使用之外,Java 还提供了专门用于枚举类型的容器类,如 `EnumMap` 和 `EnumSet`。 ##### 4.1 EnumMap 使用示例 `EnumMap` 是一个专为枚举类型设计的映射容器,其键必须是枚举类型。例如: ```...
Java提供了`EnumSet`和`EnumMap`两种专为枚举设计的集合类。`EnumSet`是一个高效的集合,用于存储枚举类型,而`EnumMap`则是一个键为枚举类型的高效映射表: ```java EnumSet<WeekDay> weekendDays = EnumSet.of...
实验报告主要涵盖了Java编程中的高级主题,特别是关于集合框架、映射和枚举类型的应用...同时,实验也涵盖了枚举类型的使用,以及EnumSet和EnumMap的基础应用。通过实际操作,学生能更好地理解和掌握这些高级编程概念。
枚举还可以与其他数据结构结合使用,如`EnumMap`和`EnumSet`。`EnumMap`是一种映射,其键由枚举类型构成,而`EnumSet`则是一个高效、线程安全的集合,专门用来存储枚举类型。 此外,枚举在多线程环境下表现出良好的...
Java还提供了专门针对枚举的集合类:`EnumMap`和`EnumSet`。`EnumMap`是一个映射,其中的键是枚举类型,而`EnumSet`则是一个高效、不可变的集合,只包含枚举类型中的元素。 二、反射机制 反射机制允许在运行时检查...
枚举类型还可以与其他集合框架结合使用,例如`EnumSet`和`EnumMap`。`EnumSet`是专为枚举设计的高效集合,而`EnumMap`则是一个以枚举类型为键的映射表。 在枚举类型中,还可以定义抽象方法,所有枚举常量必须实现...
枚举可以方便地与Java集合框架一起使用,例如放入`EnumSet`和`EnumMap`中。`EnumSet`比普通`Set`更高效,`EnumMap`比普通`Map`在枚举作为键时具有更好的性能。 11. 枚举的常量顺序: 枚举常量的顺序是它们在枚举...
11. EnumSet与EnumMap:针对枚举类型,Java提供了更高效的Set(EnumSet)和Map(EnumMap)实现,它们在内部优化了存储和操作,特别适合枚举类型的场景。 12. Iterator和Iterable接口:Iterator用于遍历集合元素,...
5. **EnumSet和EnumMap**: 如果扑克牌的花色和数值用枚举类型定义,那么EnumSet和EnumMap会是理想的容器。它们针对枚举类型做了优化,提供了高效的性能和简洁的代码。 6. **Collections工具类**: 这个静态类提供了...
枚举类可以继承`EnumSet`或`EnumMap`,这两个类提供了针对枚举的优化操作。例如: ```java EnumSet<Color> colors = EnumSet.allOf(Color.class); ``` 通过学习上述知识点,你可以更好地理解和运用Java枚举,...
6. **EnumSet和EnumMap** - `EnumSet`:这是一种专门为枚举类型设计的高效集合,提供了类似Set的功能,不允许重复元素,按自然顺序排列。 - `EnumMap`:是基于枚举的键值对容器,它将枚举作为键,性能优秀,内存...
11. **EnumSet和EnumMap**:专为枚举类型设计的高效集合实现, EnumSet是Set的优化版本,EnumMap是Map的优化版本,它们在内部使用位运算和数组实现,性能优秀。 以上只是Java集合框架的一部分核心概念,实际开发中...
8. **EnumSet与EnumMap**:专为枚举类型设计的集合类,它们提供了高效的性能和内存使用。 9. **Map接口**:Map接口定义了键值对的存储,提供了get、put、remove等操作。它的实现类包括HashMap、TreeMap、...
最后,`EnumSet`和`EnumMap`是Java专门为枚举类型设计的高效容器。`EnumSet`是一种非常高效的集合,适用于存储枚举值;`EnumMap`则是一种以枚举为键的映射表,性能优于普通`HashMap`。 总之,深入理解并熟练运用...