enumset是java中专为枚举类型设计的高性能集合,1. 使用enumset.allof创建包含所有枚举元素的集合;2. 使用enumset.noneof创建空集合;3. 使用enumset.of创建包含指定元素的集合;4. 使用enumset.range创建指定范围内的集合;其内部通过位向量实现,以极低内存开销和极高操作效率支持add、remove、contains等操作,适用于权限管理、日程安排等需存储有限枚举常量的场景,且类型安全、性能优越,但需注意其非线程安全、不可存null、可变性等问题,必要时应进行同步或封装为不可变集合,因此在处理枚举集合时应优先选择enumset以获得最佳性能和清晰语义。

EnumSet
EnumSet
HashSet
使用
EnumSet
最常见的几种创建
EnumSet
立即学习“Java免费学习笔记(深入)”;
EnumSet.allOf(Class<E> elementType)
EnumSet
import java.util.EnumSet;
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public class EnumSetDemo {
public static void main(String[] args) {
EnumSet<Day> allDays = EnumSet.allOf(Day.class);
System.out.println("所有天数: " + allDays); // 输出: 所有天数: [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY]
}
}EnumSet.noneOf(Class<E> elementType)
EnumSet
EnumSet<Day> emptyDays = EnumSet.noneOf(Day.class);
System.out.println("空集合: " + emptyDays); // 输出: 空集合: []
emptyDays.add(Day.MONDAY);
emptyDays.add(Day.FRIDAY);
System.out.println("添加后: " + emptyDays); // 输出: 添加后: [MONDAY, FRIDAY]EnumSet.of(E e1, E... others)
EnumSet
EnumSet<Day> weekend = EnumSet.of(Day.SATURDAY, Day.SUNDAY);
System.out.println("周末: " + weekend); // 输出: 周末: [SATURDAY, SUNDAY]EnumSet.range(E from, E to)
EnumSet
EnumSet<Day> weekdays = EnumSet.range(Day.MONDAY, Day.FRIDAY);
System.out.println("工作日: " + weekdays); // 输出: 工作日: [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY]一旦创建,
EnumSet
Set
add()
remove()
contains()
iterator()
addAll()
removeAll()
retainAll()
这是个好问题,毕竟我们有
HashSet
TreeSet
EnumSet
EnumSet
HashSet
在大多数情况下,
EnumSet
long
long
EnumSet
long[]
考虑一下,当你需要存储一组权限标志,或者表示一周中的几天,这些都是固定且数量不多的枚举常量。用
EnumSet
EnumSet
在日常开发中,
EnumSet
一个非常典型的例子是权限管理。假设你有一个用户,他可以拥有多种操作权限,比如
READ
WRITE
DELETE
EXECUTE
enum Permission {
READ, WRITE, DELETE, EXECUTE
}一个用户的权限集合就可以用
EnumSet<Permission>
EnumSet.allOf(Permission.class)
EnumSet.of(Permission.READ, Permission.WRITE)
set.contains(Permission.DELETE)
再比如,表示一周中的工作日或周末。你可能有一个任务调度系统,需要指定任务在哪些天运行。
EnumSet<Day> workingDays = EnumSet.range(Day.MONDAY, Day.FRIDAY); EnumSet<Day> holidaySchedule = EnumSet.of(Day.SATURDAY, Day.SUNDAY);
或者,在配置选项的场景。想象一个图形处理库,用户可以选择不同的渲染模式或效果:
enum RenderOption {
HIGH_QUALITY, LOW_RESOLUTION, SHADOWS, REFLECTIONS, ANTI_ALIASING
}
// 用户选择的渲染选项
EnumSet<RenderOption> userOptions = EnumSet.of(RenderOption.HIGH_QUALITY, RenderOption.SHADOWS);
if (userOptions.contains(RenderOption.REFLECTIONS)) {
// 执行反射渲染逻辑
}这些场景的共同特点是:集合中的元素是有限的、预定义的枚举常量,且经常需要进行集合的并、交、差等操作,或者快速判断某个元素是否存在。
EnumSet
虽然
EnumSet
首先,
EnumSet
EnumSet
add()
remove()
Collections.synchronizedSet()
import java.util.Collections; import java.util.Set; Set<Day> synchronizedDays = Collections.synchronizedSet(EnumSet.noneOf(Day.class));
其次,
EnumSet
null
add(null)
NullPointerException
null
null
再者,
EnumSet
Set<Day> immutableDays = Collections.unmodifiableSet(EnumSet.of(Day.MONDAY, Day.WEDNESDAY)); // immutableDays.add(Day.FRIDAY); // 这行代码会抛出 UnsupportedOperationException
一个可能被忽视但很重要的点是,
EnumSet
long[]
long
HashSet
最后,一个最佳实践是,在你的代码中,只要是涉及到枚举集合的场景,优先考虑EnumSet
HashSet
ArrayList
EnumSet
以上就是Java集合框架如何使用EnumSet存储枚举元素_Java集合框架枚举集合的高效使用方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号