EnumSet是Java中专为枚举设计的高性能集合,基于位向量实现,具有内存紧凑、操作高效的特点。1. 使用allOf创建包含所有枚举值的集合;2. noneOf创建空集合;3. of添加指定元素;4. range创建连续范围的枚举集合。支持add、remove、contains等Set操作,以及addAll、retainAll等集合运算。内部以位运算提升性能,元素按声明顺序排序,不可存null,非线程安全。适用于权限控制、状态机等场景,相比位掩码更安全易读,是处理枚举集合的理想选择。

在Java中,EnumSet 是一种专为枚举类型设计的高性能集合实现。它提供了紧凑的内部存储结构和高效的位向量操作,使得对枚举值的操作既快速又节省内存。如果你有一个枚举类型,并需要存储和操作一组枚举常量,EnumSet 是理想选择。
EnumSet 提供了多个静态工厂方法来创建实例,不能通过 new 关键字直接构造。以下是常用的创建方式:
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
// 使用 allOf 获取所有工作日(假设前五天)
EnumSet<Day> workDays = EnumSet.range(Day.MONDAY, Day.FRIDAY);
// 创建包含周末的集合
EnumSet<Day> weekends = EnumSet.of(Day.SATURDAY, Day.SUNDAY);
// 创建空集合,再添加元素
EnumSet<Day> selectedDays = EnumSet.noneOf(Day.class);
selectedDays.add(Day.WEDNESDAY);
selectedDays.add(Day.SATURDAY);
// 复制另一个 EnumSet
EnumSet<Day> copy = EnumSet.copyOf(workDays);
EnumSet 支持标准的 Set 接口操作,如添加、删除、判断包含、求并集、交集等。
EnumSet<Day> monToWed = EnumSet.range(Day.MONDAY, Day.WEDNESDAY); EnumSet<Day> wedToFri = EnumSet.range(Day.WEDNESDAY, Day.FRIDAY); // 求并集:周一到周五 monToWed.addAll(wedToFri); // 结果包含 MONDAY ~ FRIDAY // 清理重新使用 monToWed = EnumSet.range(Day.MONDAY, Day.WEDNESDAY); monToWed.retainAll(wedToFri); // 交集 → 只剩 WEDNESDAY
EnumSet 内部使用位向量(bit vector)表示元素存在性,每个枚举常量对应一个位。这种设计带来以下优势:
立即学习“Java免费学习笔记(深入)”;
但也有几点需要注意:
EnumSet 特别适合用于表示一组标志位或选项组合。例如:
相比使用 int 位掩码,EnumSet 更安全、可读性更强,同时性能几乎不输底层位操作。
基本上就这些。只要你的数据是枚举类型,EnumSet 就值得优先考虑。它简洁、高效、语义清晰,是 Java 集合框架中被低估但非常实用的工具之一。
以上就是如何在Java中使用EnumSet集合的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号