`
chaoyi
  • 浏览: 309638 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

类集对Enum的支持

 
阅读更多

本章目标
掌握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、
 * */
}

 

 

 

 

  • 大小: 58 KB
分享到:
评论

相关推荐

    java中enum枚举的详细用法

    尽管枚举类不能被继承,但每个枚举类型都隐式地继承了`java.lang.Enum`类,这意味着它们可以实现接口并提供具体实现。这使得枚举可以具有多态行为。 6. 枚举的序列化 默认情况下,枚举是可序列化的。如果不需要...

    Java中的枚举类型Enum示例源代码

    总之,Java的枚举类型`Enum`不仅提供了对常量集的封装,还具备了类的所有功能,包括方法、构造函数和继承。它极大地增强了代码的可读性和安全性,是Java开发中的一个重要特性。通过深入理解和熟练应用,可以提高代码...

    java类集.zip

    Java 类集框架是Java编程语言中的一个重要组成部分,它提供了对数据结构如集合、队列、映射等的高效实现。这个“java类集.zip”压缩包显然包含了与Java类集和枚举相关的学习材料,旨在帮助您深入理解这两个关键概念...

    cpp-BetterEnums编译时期枚举库拥有干净的语法只有一个头文件没有依赖性

    此外,Better Enums库还支持枚举的枚举集(enum set)操作,类似于C++的位掩码。你可以创建一个枚举集,然后进行并集、交集、差集等操作,这对于处理多个枚举值的组合情况非常方便。 在实现方面,Better Enums库仅...

    rapidjson,glm,enum

    Rapidjson提供了一种高效的解析和生成JSON的方法,支持SAX和DOM两种解析模式,适用于内存受限的环境以及对性能有较高要求的应用。它还支持Unicode编码,包括UTF-8,UTF-16和UTF-32,使得处理多语言字符集变得轻松。 ...

    laravel-enum:更方便地在项目中定义并使用枚举

    概览提供了多种实用的方式来实例化枚举支持多语言本地化描述支持表单验证,提供验证规则 enum,enum_key 和 enum_value,对请求参数中的参数进行枚举校验支持路由中间件自动将 Request 参数转换成相应枚举实例支持 ...

    Java enum的用法详解.docx

    枚举类型继承了`java.lang.Enum`类,因此可以覆盖其自带的方法。以下展示了如何覆盖`toString()`方法: ```java public class Test { public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), ...

    enumflags2:Rust库,用于高效地表示无数据枚举集

    枚举标志enumflags2实现了经典的enumflags2结构。 用#[bitflags]注释一个枚举, BitFlags将能够在单个... 对带有功能标志的序列化的可选支持。例子use enumflags2 :: {bitflags, make_bitflags, BitFlags};#[bitflags]#

    详解Java的Enum的使用与分析

    枚举默认继承自`java.lang.Enum`类,并且可以实现接口。这使得枚举可以拥有自己的方法和字段,提供更丰富的功能。 6. **枚举的序列化**: 枚举类默认是可序列化的,但是枚举值的序列化是固定的,不支持动态添加或...

    一种基于ENUM的Android SQLite框架.zip

    然而,当涉及到枚举类型(ENUM)时,SQLite本身并不直接支持。因此,开发人员通常需要找到一些创新的方式来模拟枚举的行为。本文将深入探讨如何在Android中利用ENUM与SQLite框架结合,以实现更高效、更易维护的数据...

    1500个WINDOWS API类 全集

    `EnumHandler.cls`可能涉及到枚举窗口、控件或者其他系统对象的API,如`EnumWindows`和`EnumChildWindows`,以及相应的回调处理。此外,可能还包括系统事件的处理,如消息队列的处理,利用`GetMessage`、`...

    Java中的内部类应用举例

    ### Java中的内部类应用举例 #### 一、Java内部类概览 ...总之,Java内部类和枚举类型都是Java语言中重要的特性,它们各自在封装、模块化以及状态管理等方面提供了强大的支持,是高级Java程序设计不可或缺的部分。

    C++编程思想/模板和容器类

    总结来说,C++的模板和容器类为编写高效、灵活和可重用的代码提供了强大支持。通过模板,程序员可以创建泛化的数据结构和算法,而容器类则为数据管理和操作提供了结构化的方法。这两个概念是现代C++编程不可或缺的...

    Java API 合集资源

    Java API提供了`java.lang.Thread`类和`java.util.concurrent`包来支持多线程编程。通过创建`Thread`对象或实现`Runnable`接口,可以轻松地创建和管理线程。`java.util.concurrent`包包含高级并发工具,如`...

    2023编程精选题库:Java面试题集及参考答案.docx

    switch 语句可以使用 byte、short、char、int 或者其对应的封装类、Enum 类型和 String 类型。从 Java 1.7 之后,switch 开始支持 String。 十、String 的 intern() 方法 String 的 intern() 方法会首先从常量池中...

    java 1.6 API 中文版

    另外,Enum类支持枚举类型,这是Java 5.0引入的新特性,增强了代码的可读性和安全性。 二、集合框架 Java 1.6的集合框架是数据存储和操作的核心部分,包括List(如ArrayList和LinkedList)、Set(如HashSet和...

    斯坦福自然语言推理(SNLI)语料库-数据集

    SNLI语料库(1.0版)是一个570k人工编写的英语句子对的集合,这些句子对经过手动标记以实现平衡分类,并带有enume,矛盾和中性标签,支持自然语言推理(NLI)的任务,也称为识别文本蕴涵(RTE)。可用于探索知识图谱...

    C#语法之类[参照].pdf

    C#支持单一继承,即一个类只能有一个基类。基类使用冒号(`:`)后跟基类名称来指定。 ```csharp class DerivedClass : BaseClass {} ``` #### 410.1.2.2 接口实现 类还可以实现一个或多个接口,接口使用逗号分隔。...

    msado15中C++连接数据库用到的类和函数

    - 虽然上述代码没有直接使用MFC(Microsoft Foundation Classes),但MFC提供了对ADO的支持,例如`CDaoDatabase`和`CDaoRecordset`类,它们提供了更方便的数据库访问接口,适合MFC应用程序。 通过以上这些类和函数...

Global site tag (gtag.js) - Google Analytics