`
cakin24
  • 浏览: 1383732 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

专为枚举类设计的集合类EnumSet

    博客分类:
  • java
阅读更多

一 集合类EnumSet概述

  • EnumSet是一个专为枚举类设计的集合类,EnumSet中所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建EnumSet时显式或隐式地指定。EnumSet的集合元素也是有序的,EnumSet以枚举值在Enum类的定义顺序来决定集合元素的顺序。
  • EnumSet在内部以位向量的形式存储,这种存储形式非常紧凑、高效,因此EnumSet对象占用内存很小,而且运行效率很好。尤其是当进行批量操作(如调用containsAll 和 retainAll方法)时,如果其参数也是EnumSet集合,则该批量操作的执行速度也非常快。
  • EnumSet集合不允许加入null元素。如果试图插入null元素,EnumSet将抛出 NullPointerException异常。如果仅仅只是试图测试是否出现null元素、或删除null元素都不会抛出异常,只是删除操作将返回false,因为没有任何null元素被删除。

EnumSet类的常规应用

1 代码示例

import java.util.*;

enum Season
{
	SPRING,SUMMER,FALL,WINTER
}
public class EnumSetTest
{
	public static void main(String[] args)
	{
		// 创建一个EnumSet集合,集合元素就是Season枚举类的全部枚举值
		EnumSet es1 = EnumSet.allOf(Season.class);
		System.out.println(es1); // 输出[SPRING,SUMMER,FALL,WINTER]
		// 创建一个EnumSet空集合,指定其集合元素是Season类的枚举值。
		EnumSet es2 = EnumSet.noneOf(Season.class);
		System.out.println(es2); // 输出[]
		// 手动添加两个元素
		es2.add(Season.WINTER);
		es2.add(Season.SPRING);
		System.out.println(es2); // 输出[SPRING,WINTER]
		// 以指定枚举值创建EnumSet集合
		EnumSet es3 = EnumSet.of(Season.SUMMER , Season.WINTER);
		System.out.println(es3); // 输出[SUMMER,WINTER]
		EnumSet es4 = EnumSet.range(Season.SUMMER , Season.WINTER);
		System.out.println(es4); // 输出[SUMMER,FALL,WINTER]
		// 新创建的EnumSet集合的元素和es4集合的元素有相同类型,
		// es5的集合元素 + es4集合元素 = Season枚举类的全部枚举值
		EnumSet es5 = EnumSet.complementOf(es4);
		System.out.println(es5); // 输出[SPRING]
	}
}

2 运行结果

[SPRING, SUMMER, FALL, WINTER]
[]
[SPRING, WINTER]
[SUMMER, WINTER]
[SUMMER, FALL, WINTER]
[SPRING]

3 代码说明

此代码示范了如何使用EnumSet来保存枚举类的多个枚举值。

 

三 EnumSet类的错误使用

1 代码示例

import java.util.*;
enum Season
{
	SPRING,SUMMER,FALL,WINTER
}
public class EnumSetTest2
{
	public static void main(String[] args)
	{
		Collection c = new HashSet();
		c.clear();
		c.add(Season.FALL);
		c.add(Season.SPRING);
		// 复制Collection集合中所有元素来创建EnumSet集合
		EnumSet enumSet = EnumSet.copyOf(c);   // ①
		System.out.println(enumSet); // 输出[SPRING,FALL]
		c.add("Java");
		c.add("Linux");
		// 下面代码出现异常:因为c集合里的元素不是全部都为枚举值
		enumSet = EnumSet.copyOf(c);  // ②
		System.out.println(enumSet);
	}
}

 

2 运行结果

[SPRING, FALL]
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum
        at java.util.EnumSet.copyOf(Unknown Source)
        at EnumSetTest2.main(EnumSetTest2.java:21)

 

3 代码说明

当试图复制一个Collection集合里的元素来创建EnumSet集合时,必须保证Collection集合里的所有元素都是同一个枚举类的枚举值。

 

 

0
0
分享到:
评论

相关推荐

    说说Java中的枚举 转 可以了,够了 包括EnumSet(Map)

    `EnumSet`是Java提供的一种高效、线程安全的集合类,专门用来存储枚举类型值。它实现了`Set`接口,但比一般的`HashSet`更优化,因为它不需要存储额外的哈希映射。`EnumSet`的所有操作都是针对枚举类型的,这意味着它...

    java集合-EnumSet的使用

    EnumSet 是 Java 中用于存储枚举类型元素的集合类。它是 AbstractSet 的子类,并专门为枚举类型设计,提供了高效的实现。 下面是关于 EnumSet 的一些重要信息: 存储枚举元素:EnumSet 只能存储同一个枚举类型的...

    enum枚举类的一些代码demo

    Java提供了`EnumSet`和`EnumMap`两种专为枚举设计的集合类。`EnumSet`是一个高效的集合,用于存储枚举类型,而`EnumMap`则是一个键为枚举类型的高效映射表: ```java EnumSet<WeekDay> weekendDays = EnumSet.of...

    java实现高效的枚举元素集合示例

    `EnumSet`集合类提供了与普通集合不同的性能优势,特别是对于枚举类型的操作。`EnumSet`是线程安全的,并且在内部使用位运算进行操作,这使得它的性能比传统的Set实现(如HashSet)更优秀,特别是在处理大量枚举元素...

    阅读EnumSet抽象类

    EnumSet的设计是专门为枚举类的集合类,所有元素必须是枚举类型,集合元素是有序的,内部以位向量的形式存储。 EnumSet抽象类的实现机制主要包括以下几个方面: 首先,EnumSet抽象类继承自AbstractSet抽象类,并...

    Java实现高效的枚举元素集合

    EnumSet是专门为enum实现的集合类,本实例将演示其用法。  思路分析:可以通过为EnumSet指定类型,该类型即为在同一包中定义的枚举类。使用EnumSet类的add()方法添加元素,使用EnumSet类的remove()方法删除元素,...

    简单总结java枚举类型

    Java枚举类型是Java语言中一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的方式来表示一组有限的值。枚举在Java中被引入为一个完整的类型,不同于C++中的枚举,这使得Java枚举更加强大且易于使用...

    JAVA高级编程中Enum枚举

    最后,`EnumSet`和`EnumMap`是Java专门为枚举类型设计的高效容器。`EnumSet`是一种非常高效的集合,适用于存储枚举值;`EnumMap`则是一种以枚举为键的映射表,性能优于普通`HashMap`。 总之,深入理解并熟练运用...

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

    `EnumSet`是专为枚举设计的高效集合,而`EnumMap`则是一个以枚举类型为键的映射表。 在枚举类型中,还可以定义抽象方法,所有枚举常量必须实现这些方法。这种模式被称为"枚举伴生对象",可以用来为每个枚举常量提供...

    java枚举ppt和详细代码

    枚举类可以继承`EnumSet`或`EnumMap`,这两个类提供了针对枚举的优化操作。例如: ```java EnumSet<Color> colors = EnumSet.allOf(Color.class); ``` 通过学习上述知识点,你可以更好地理解和运用Java枚举,...

    java 枚举学习心得

    同时,枚举还支持枚举常量之间的自然排序,可以与其他集合框架结合使用,如`EnumSet`和`EnumMap`。 总的来说,学习Java枚举不仅能够帮助我们编写更清晰、更安全的代码,还能提高程序设计的效率。通过深入理解枚举的...

    集合类实惠有好用的,资源

    8. **EnumSet与EnumMap**:专为枚举类型设计的集合类,它们提供了高效的性能和内存使用。 9. **Map接口**:Map接口定义了键值对的存储,提供了get、put、remove等操作。它的实现类包括HashMap、TreeMap、...

    Java期末复习——枚举与反射机制

    Java还提供了专门针对枚举的集合类:`EnumMap`和`EnumSet`。`EnumMap`是一个映射,其中的键是枚举类型,而`EnumSet`则是一个高效、不可变的集合,只包含枚举类型中的元素。 二、反射机制 反射机制允许在运行时检查...

    java枚举类型enum的使用

    `EnumSet` 是一个专为枚举类型设计的集合类,用于存储枚举类型的元素。它提供了一些特殊的方法,使得操作枚举元素更加高效: ```java public static void testEnumSet() { EnumSet<Light> currEnumSet = EnumSet....

    java枚举的一个实例

    枚举在集合框架中也有广泛应用,如`java.util.EnumSet`和`java.util.EnumMap`,它们提供了针对枚举类型优化的高效集合实现。 总的来说,Java枚举提供了一种强类型、安全且易于使用的机制来表示固定集合的值。通过...

    Java 常用武器库之枚举1

    - `EnumSet`和`EnumMap`是专门为枚举设计的高效集合类,它们提供了针对枚举类型优化的操作。 枚举在Java中的应用广泛,尤其是在设计模式中,如工厂模式、策略模式等。使用枚举可以增强代码的可读性和可维护性,...

    javaenum(枚举)使用详解+总结.pdf

    - `EnumSet`:这是一种专门为枚举类型设计的高效集合,提供了类似Set的功能,不允许重复元素,按自然顺序排列。 - `EnumMap`:是基于枚举的键值对容器,它将枚举作为键,性能优秀,内存占用低。 7. **枚举的类...

    一文弄懂EnumMap和EnumSet

    EnumMap是HashMap的一个变种,专为枚举类型设计。它的关键特性是所有键必须是同一个枚举类型的实例。这使得EnumMap能够进行更高效的内存管理和查找操作。EnumMap的定义如下: ```java public class EnumMap, V> ...

    Java枚举类型enum的详解及使用

    EnumMap 和 EnumSet 是 Java 中的两个特殊的集合类,它们都是专门用于枚举类型的集合操作的。例如,我们可以使用 EnumMap 来保存枚举类型的映射关系: ```java EnumMap, String> map = new EnumMap(Light.class); ...

    实例181 - 遍历枚举接口的元素

    枚举接口(Enum Set)是Java提供的一种高效、简洁的方式来处理枚举类型集合。本实例“实例181 - 遍历枚举接口的元素”主要探讨如何遍历和操作这些枚举类型的元素。 首先,我们需要理解枚举的基本概念。枚举是一种预...

Global site tag (gtag.js) - Google Analytics