本章目标
掌握EnumMap类的使用
掌握EnumSet类的使用
类集对枚举的支持
在JDK 1.5的java.util 程序包中提供两个新的集合操作类:EnumMap 和 EnumSet,这两个类与枚举类型的结合应用可使以前非常繁琐的程序变得简单方便。EnumSet类提供了java.util.Set接口的一个特殊实现,而EnumMap类提供了java.util.Map接口的一个特殊实现,该类中的键(key)是一个枚举类型。
EnumMap
EnumMap是Map接口的子类,所以本身还是以Map的形式进行操作,即:key —> value。如果要想使用EnumMap,则首先要创建EnumMap的对象,在创建此对象的时候必须指定要操作的枚举类型,所以构造方法如下所示:
——public EnumMap(Class<K> keyType)
验证EnumMap
import java.util.EnumMap; import java.util.Map; enum Color{ RED,GREEN,BLUE;//定义枚举的 3 个类型 } public class EnumMapDemo { public static void main(String[] args) { Map<Color,String> desc = null;//定义一个 Map 对象 desc =new EnumMap<Color, String>(Color.class);//实例化 EnumMap desc.put(Color.RED,"红色");//加入一个内容 desc.put(Color.GREEN,"绿色");//加入一个内容 desc.put(Color.BLUE,"蓝色");//加入一个内容 System.out.println("======= 输出全部的内容 ======="); for(Color c:Color.values()){//取得全部的枚举 System.out.println(c.ordinal() +" --> "+c.name()); } System.out.println("======= 输出全部的键值 ======="); for(Color c:desc.keySet()){//取得全部的 key System.out.print(c.name()+"、"); } System.out.println("\n======= 输出全部的内容 ======="); for(String s:desc.values()){//取得全部的 value System.out.print(s+"、"); } } /* 结果: * ======= 输出全部内容 ======= * 0 --> RED * 1 --> GREEN * 2 --> BLUE * ======= 输出全部内容 ======= * RED、GREEN、BLUE、 * ======= 输出全部内容 ======= * 红色、绿色、蓝色、 * */ }
EnumSet
EnumSet是Set接口的子类,所以里面的内容是无法重复的,在使用EnumSet的时候是不能直接使用关键字new为其进行实例化的,所以在此类中提供了很多的静态方法。
EnumSet类的常用方法
验证EnumSet —— 将全部的集合设置到EnumSet集合之中
import java.util.EnumSet; enum Color{ RED,GREEN,BLUE;//定义枚举的 3 个类型 } public class EnumSetDemo01 { public static void main(String[] args) { EnumSet<Color> es = null;//声明一个 EnumSet 对象 System.out.println("====== EnumSet.allOf(Color.class) ======"); es = EnumSet.allOf(Color.class);//将枚举的全部类型设置到 EnumSet 对象中 print(es); } public static void print(EnumSet<Color> temp){//专门的输出操作 for(Color c:temp){//循环输出 EnumSet 中的内容 System.out.print(c+"、"); } } /* 结果: * ====== EnumSet.allOf(Color.class) ====== * RED、GREEN、BLUE、 * */ }
验证EnumSet —— 只设置一个枚举的类型到集合之中
import java.util.EnumSet; enum Color{ RED,GREEN,BLUE;//定义枚举的 3 个类型 } public class EnumSetDemo02 { public static void main(String[] args) { EnumSet<Color> es = null;//声明一个 EnumSet 对象 System.out.println("====== EnumSet.of(Color.BLUE) ======"); es = EnumSet.of(Color.BLUE);//设置一个枚举的内容 print(es); } public static void print(EnumSet<Color> temp){//专门的输出操作 for(Color c:temp){//循环输出 EnumSet 中的内容 System.out.print(c+"、"); } } /* 结果: * ====== EnumSet.of(Color.BLUE) ====== * BLUE、 * */ }
验证EnumSet —— 创建只能放入指定枚举类型的集合
import java.util.EnumSet; enum Color{ RED,GREEN,BLUE;//定义枚举的 3 个类型 } public class EnumSetDemo03 { public static void main(String[] args) { EnumSet<Color> es = null;//声明一个 EnumSet 对象 System.out.println("====== EnumSet.noneOf(Color.class) ======"); es = EnumSet.noneOf(Color.class);//创建一个可以加入 Color 类型的对象 es.add(Color.RED);//增加内容 es.add(Color.GREEN);//增加内容 print(es); } public static void print(EnumSet<Color> temp){//专门的输出操作 for(Color c:temp){//循环输出 EnumSet 中的内容 System.out.print(c+"、"); } } /* 结果: * ====== EnumSet.noneOf(Color.class) ====== * RED、GREEN、 * */ }
验证EnumSet —— 创建不包含指定元素的集合
import java.util.EnumSet; enum Color{ RED,GREEN,BLUE;//定义枚举的 3 个类型 } public class EnumSetDemo04 { public static void main(String[] args) { EnumSet<Color> esOld = null;//声明一个 EnumSet 对象 EnumSet<Color> esNew = null;//声明一个 EnumSet 对象 esOld = EnumSet.noneOf(Color.class);//创建一个可以加入 Color 类型的对象 esOld.add(Color.RED);//增加内容 esOld.add(Color.GREEN);//增加内容 System.out.println("====== EnumSet.complementOf(es) ======"); esNew = EnumSet.complementOf(esOld);//创建一个不包含指定元素的集合 print(esNew); } public static void print(EnumSet<Color> temp){//专门的输出操作 for(Color c:temp){//循环输出 EnumSet 中的内容 System.out.print(c+"、"); } } /* 结果: * ====== EnumSet.complementOf(es) ====== * BLUE、 * */ }
验证EnumSet —— 拷贝已有的内容
import java.util.EnumSet; enum Color{ RED,GREEN,BLUE;//定义枚举的 3 个类型 } public class EnumSetDemo05 { public static void main(String[] args) { EnumSet<Color> esOld = null;//声明一个 EnumSet 对象 EnumSet<Color> esNew = null;//声明一个 EnumSet 对象 esOld = EnumSet.noneOf(Color.class);//创建一个可以加入 Color 类型的对象 esOld.add(Color.RED);//增加内容 esOld.add(Color.GREEN);//增加内容 System.out.println("====== EnumSet.copyOf(es) ======"); esNew = EnumSet.copyOf(esOld);//从已有的集合中复制出内容 print(esNew); } public static void print(EnumSet<Color> temp){//专门的输出操作 for(Color c:temp){//循环输出 EnumSet 中的内容 System.out.print(c+"、"); } } /* 结果: * ====== EnumSet.copyOf(es) ====== * RED、GREEN、 * */ }
相关推荐
尽管枚举类不能被继承,但每个枚举类型都隐式地继承了`java.lang.Enum`类,这意味着它们可以实现接口并提供具体实现。这使得枚举可以具有多态行为。 6. 枚举的序列化 默认情况下,枚举是可序列化的。如果不需要...
总之,Java的枚举类型`Enum`不仅提供了对常量集的封装,还具备了类的所有功能,包括方法、构造函数和继承。它极大地增强了代码的可读性和安全性,是Java开发中的一个重要特性。通过深入理解和熟练应用,可以提高代码...
Java 类集框架是Java编程语言中的一个重要组成部分,它提供了对数据结构如集合、队列、映射等的高效实现。这个“java类集.zip”压缩包显然包含了与Java类集和枚举相关的学习材料,旨在帮助您深入理解这两个关键概念...
此外,Better Enums库还支持枚举的枚举集(enum set)操作,类似于C++的位掩码。你可以创建一个枚举集,然后进行并集、交集、差集等操作,这对于处理多个枚举值的组合情况非常方便。 在实现方面,Better Enums库仅...
Rapidjson提供了一种高效的解析和生成JSON的方法,支持SAX和DOM两种解析模式,适用于内存受限的环境以及对性能有较高要求的应用。它还支持Unicode编码,包括UTF-8,UTF-16和UTF-32,使得处理多语言字符集变得轻松。 ...
概览提供了多种实用的方式来实例化枚举支持多语言本地化描述支持表单验证,提供验证规则 enum,enum_key 和 enum_value,对请求参数中的参数进行枚举校验支持路由中间件自动将 Request 参数转换成相应枚举实例支持 ...
枚举类型继承了`java.lang.Enum`类,因此可以覆盖其自带的方法。以下展示了如何覆盖`toString()`方法: ```java public class Test { public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), ...
枚举标志enumflags2实现了经典的enumflags2结构。 用#[bitflags]注释一个枚举, BitFlags将能够在单个... 对带有功能标志的序列化的可选支持。例子use enumflags2 :: {bitflags, make_bitflags, BitFlags};#[bitflags]#
枚举默认继承自`java.lang.Enum`类,并且可以实现接口。这使得枚举可以拥有自己的方法和字段,提供更丰富的功能。 6. **枚举的序列化**: 枚举类默认是可序列化的,但是枚举值的序列化是固定的,不支持动态添加或...
然而,当涉及到枚举类型(ENUM)时,SQLite本身并不直接支持。因此,开发人员通常需要找到一些创新的方式来模拟枚举的行为。本文将深入探讨如何在Android中利用ENUM与SQLite框架结合,以实现更高效、更易维护的数据...
`EnumHandler.cls`可能涉及到枚举窗口、控件或者其他系统对象的API,如`EnumWindows`和`EnumChildWindows`,以及相应的回调处理。此外,可能还包括系统事件的处理,如消息队列的处理,利用`GetMessage`、`...
### Java中的内部类应用举例 #### 一、Java内部类概览 ...总之,Java内部类和枚举类型都是Java语言中重要的特性,它们各自在封装、模块化以及状态管理等方面提供了强大的支持,是高级Java程序设计不可或缺的部分。
总结来说,C++的模板和容器类为编写高效、灵活和可重用的代码提供了强大支持。通过模板,程序员可以创建泛化的数据结构和算法,而容器类则为数据管理和操作提供了结构化的方法。这两个概念是现代C++编程不可或缺的...
Java API提供了`java.lang.Thread`类和`java.util.concurrent`包来支持多线程编程。通过创建`Thread`对象或实现`Runnable`接口,可以轻松地创建和管理线程。`java.util.concurrent`包包含高级并发工具,如`...
switch 语句可以使用 byte、short、char、int 或者其对应的封装类、Enum 类型和 String 类型。从 Java 1.7 之后,switch 开始支持 String。 十、String 的 intern() 方法 String 的 intern() 方法会首先从常量池中...
另外,Enum类支持枚举类型,这是Java 5.0引入的新特性,增强了代码的可读性和安全性。 二、集合框架 Java 1.6的集合框架是数据存储和操作的核心部分,包括List(如ArrayList和LinkedList)、Set(如HashSet和...
SNLI语料库(1.0版)是一个570k人工编写的英语句子对的集合,这些句子对经过手动标记以实现平衡分类,并带有enume,矛盾和中性标签,支持自然语言推理(NLI)的任务,也称为识别文本蕴涵(RTE)。可用于探索知识图谱...
C#支持单一继承,即一个类只能有一个基类。基类使用冒号(`:`)后跟基类名称来指定。 ```csharp class DerivedClass : BaseClass {} ``` #### 410.1.2.2 接口实现 类还可以实现一个或多个接口,接口使用逗号分隔。...
- 虽然上述代码没有直接使用MFC(Microsoft Foundation Classes),但MFC提供了对ADO的支持,例如`CDaoDatabase`和`CDaoRecordset`类,它们提供了更方便的数据库访问接口,适合MFC应用程序。 通过以上这些类和函数...