亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java EnumSet:创建、操作与性能优化指南

Java EnumSet

本指南通过实战代码示例与最佳实践,带你掌握 Java EnumSet 的创建、操作与优化。

EnumSet 类是专为枚举类型设计的高性能 Set 实现。它实现 java.util.Set 接口,并继承 Cloneable 和 Serializable,兼具通用性与高效性。

深入前,请确保熟悉 Java 枚举,因 EnumSet 紧密绑定单一枚举类型。

Java EnumSet:创建、操作与性能优化指南


创建 EnumSet

与其他 Set 实现不同,EnumSet 不暴露公共构造器。而是使用静态工厂方法构建集合。

1. 使用 EnumSet.allOf()

allOf() 创建包含指定枚举类型所有常量的集合。

import java.util.EnumSet;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        EnumSet<Size> sizes = EnumSet.allOf(Size.class);
        System.out.println("EnumSet: " + sizes);
    }
}

输出

EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]

2. 使用 EnumSet.noneOf()

创建仅能包含指定枚举类型值的空集合。

import java.util.EnumSet;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        EnumSet<Size> sizes = EnumSet.noneOf(Size.class);
        System.out.println("空 EnumSet: " + sizes);
    }
}

输出

空 EnumSet: []

注意:结果集仅接受 Size 常量,因实例化时使用 Size.class。

3. 使用 EnumSet.range()

构建包含从下界到上界(含)所有枚举常量的集合。

import java.util.EnumSet;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        EnumSet<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE);
        System.out.println("EnumSet: " + sizes);
    }
}

输出

EnumSet: [MEDIUM, LARGE, EXTRALARGE]

4. 使用 EnumSet.of()

创建包含一个或多个特定枚举常量的集合。

import java.util.EnumSet;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        EnumSet<Size> sizes1 = EnumSet.of(Size.MEDIUM);
        System.out.println("EnumSet1: " + sizes1);
        EnumSet<Size> sizes2 = EnumSet.of(Size.SMALL, Size.LARGE);
        System.out.println("EnumSet2: " + sizes2);
    }
}

输出

EnumSet1: [MEDIUM]
EnumSet2: [SMALL, LARGE]

EnumSet 的常用操作

添加元素

import java.util.EnumSet;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        EnumSet<Size> all = EnumSet.allOf(Size.class);
        EnumSet<Size> selected = EnumSet.noneOf(Size.class);
        selected.add(Size.MEDIUM);
        System.out.println("add() 后: " + selected);
        selected.addAll(all);
        System.out.println("addAll() 后: " + selected);
    }
}

输出

add() 后: [MEDIUM]
addAll() 后: [SMALL, MEDIUM, LARGE, EXTRALARGE]

注意 addAll() 接受任何 Collection<Size>,包括列表或集合,只要包含相同枚举类型。

遍历元素

用 Iterator 遍历:

import java.util.EnumSet;
import java.util.Iterator;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        EnumSet<Size> sizes = EnumSet.allOf(Size.class);
        Iterator<Size> it = sizes.iterator();
        System.out.print("EnumSet: ");
        while (it.hasNext()) {
            System.out.print(it.next() + ", ");
        }
    }
}

输出

EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,

移除元素

import java.util.EnumSet;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        EnumSet<Size> sizes = EnumSet.allOf(Size.class);
        System.out.println("EnumSet: " + sizes);
        boolean removed = sizes.remove(Size.MEDIUM);
        System.out.println("MEDIUM 是否移除? " + removed);
        boolean cleared = sizes.removeAll(sizes);
        System.out.println("所有元素是否移除? " + cleared);
    }
}

输出

EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]
MEDIUM 是否移除? true
所有元素是否移除? true

其他辅助方法

方法说明
copyOf()创建包含相同元素的新 EnumSet
contains()检查特定常量是否存在
isEmpty()无元素返回 true
size()返回元素数量
clear()移除所有元素

Cloneable 与 Serializable

EnumSet 实现 Cloneable,可通过 clone() 创建浅拷贝。也实现 Serializable,支持网络传输或持久化。

为何使用 EnumSet?

因 EnumSet 以位向量存储值,add、remove、contains 等操作以常数时间、极小内存开销执行。JVM 已知给定枚举的所有可能常量,使 EnumSet 远比 HashSet 或 TreeSet 等通用实现高效。

实践中,需要高性能枚举值集合时,首选 EnumSet。


java

  1. 精通 Java 运算符:类型、语法与实战示例
  2. Java 注释:类型、用法与最佳实践
  3. 精通 Java 增强 for 循环:语法、示例与最佳实践
  4. 精通 Java 字符串:创建、方法与最佳实践
  5. 精通 Java 接口:概念、实现与最佳实践
  6. 精通 Java 匿名内部类:定义、语法与实战示例
  7. 精通 Java 枚举:枚举类与枚举常量完全指南
  8. Java 枚举构造器详解与实战示例
  9. 精通 Java Try-With-Resources:自动资源管理详解
  10. Java 注解详解:类型、放置位置与实战示例
  11. Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
  12. 深入理解 Java Vector:用法、特性及与 ArrayList 的对比