信息发布→ 登录 注册 退出

j*a中EnumSet的使用

发布时间:2025-12-02

点击量:
EnumSet是J*a中专用于枚举类型的高性能集合,基于位向量实现,具有高效、有序、非线程安全、不支持null等特性,仅能存储指定枚举类型元素,通过allOf、noneOf、of、range等静态方法创建,适用于权限控制、状态标记等场景,支持集合交并差操作,推荐在处理枚举集合时优先使用。

java中enumset的使用

EnumSet 是 J*a 中专门用于枚举类型的高性能集合实现,它属于 j*a.util 包。与普通的 HashSet 或 TreeSet 相比,EnumSet 只能存储某一特定枚举类型的元素,并且内部通过位向量(bit vector)实现,因此效率非常高,内存占用也更小。

EnumSet 的特点

只能存储枚举类型: EnumSet 不允许添加 null 值,也不支持非枚举类型的数据。
性能优越: 内部使用位运算操作,存取速度极快。
有序: 元素按照枚举声明的顺序自然排序。
线程不安全: 和大多数集合一样,EnumSet 不是线程安全的,需要外部同步控制。
不允许 null 元素: 尝试添加 null 会抛出 NullPointerException。

常见创建方式

EnumSet 提供了多个静态工厂方法来创建实例,常用的有:

  • allOf(Class elementType):创建包含指定枚举类型所有值的集合。
  • noneOf(Class elementType):创建一个空的 EnumSet,元素类型为指定枚举。
  • of(E e)of(E e1, E e2, ...):创建包含指定枚举值的集合。
  • range(E from, E to):创建从 from 到 to(包含)之间的所有枚举值的集合。
  • copyOf(Collection c):从其他集合复制元素创建 EnumSet。

示例代码:

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.FRIDAY);

// 获取全部
EnumSet<Day> allDays = EnumSet.allOf(Day.class);

实际应用场景

EnumSet 特别适合用在需要对一组枚举状态进行管理的场景,比如:

诚石网上书店系统 2007 Build 1109 诚石网上书店系统 2007 Build 1109

功能简介:前台:1.图书展示(图书分类、图书详情、各种排行榜)2.图书搜索(基本搜索、高级搜索、搜索结果多种排序、进一步缩小搜索范围)3.图书推荐(将图书推荐给好友)4.图书收藏(暂时不购买的图书可以收藏)5.图书购买(完善的购买流程、使用云网在线支付网关,收费率低,结算周期短)6.图书评论7.用户注册、登陆8.强大的用户管理中心(订单管理、收藏管理、个人信息管理)9.缺书登记10.帮助中心11.

诚石网上书店系统 2007 Build 1109 0 查看详情 诚石网上书店系统 2007 Build 1109

立即学习“J*a免费学习笔记(深入)”;

  • 权限控制中的权限集合(如 READ、WRITE、EXECUTE)
  • 任务状态标记(如 PENDING、RUNNING、SUCCESS、FAILED)
  • 配置选项开关集合

例如定义权限枚举:

public enum Permission {
    READ, WRITE, DELETE, ADMIN
}

// 用户权限集合
EnumSet<Permission> userPermissions = EnumSet.of(Permission.READ, Permission.WRITE);
EnumSet<Permission> adminPermissions = EnumSet.allOf(Permission.class);

集合操作示例

可以像普通集合一样进行交集、并集、差集等操作:

EnumSet<Day> set1 = EnumSet.of(Day.MONDAY, Day.WEDNESDAY, Day.FRIDAY);
EnumSet<Day> set2 = EnumSet.of(Day.WEDNESDAY, Day.SATURDAY);

// 并集:set1.addAll(set2)
// 交集:set1.retainAll(set2)
// 差集:set1.removeAll(set2)
// 补集:EnumSet.complementOf(set1) —— 注意没有直接方法,可通过 allOf 后 removeAll 实现
EnumSet<Day> complement = EnumSet.allOf(Day.class);
complement.removeAll(set1);

基本上就这些。合理使用 EnumSet 能让枚举集合的操作更高效、代码更清晰。只要涉及枚举类型集合,优先考虑 EnumSet。

以上就是j*a中EnumSet的使用的详细内容,更多请关注其它相关文章!


相关文章: 使用J*aScript检测输入元素是否包含在特定类中  微博网页版首页入口 微博电脑端官网登录链接  PHP文件上传至S3:策略、考量与避免本地存储的挑战  J*aScript数组对象转换:按指定键分组与值收集  在Go Martini框架中高效服务动态生成图像的实践指南  Python getattr() 异常处理深度解析:避免程序意外退出  Linux如何构建多环境配置管理_Linux多环境配置方案  如何在 Windows 11 中启动游戏手柄设置  汽水音乐网页版使用入口_汽水音乐电脑版播放指南  AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看  抖音网页版怎么|直播|_抖音网页版开播操作指南  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复  深入理解J*a合成构造器:何时以及为何阻止其生成  腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址  Django通过AJAX异步上传图片并保存至模型的完整指南  谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示  Lar*el Eloquent:基于关联关系是否存在进行父模型过滤与删除  京东京造J1和网易云音乐氧气真无线有什么不同_国产电商蓝牙耳机音质对比  CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略  照顾宝贝2小游戏免费秒玩入口  Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】  新三国志曹操传110级星符试炼夏侯渊极难攻略  Android Studio计算器C键功能异常排查与修复教程  C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果  QQ邮箱正确登录入口_QQ邮箱官方网站使用地址  优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法  C++如何比较两个字符串_C++ string compare函数与操作符对比  Centos/Linux 系统下安装 composer 的完整步骤  Lar*el Form Request 中唯一性验证更新操作的正确实践  Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025  谷歌google账号怎么注册账号 谷歌账号注册官方流程  利用5118提升短视频内容效果_5118短视频关键词优化方法  如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit  如何使用纯J*aScript判断Input元素是否在特定类容器内  163邮箱登录密码 163邮箱忘记密码找回  Composer如何处理Git子模块(submodule)依赖_Composer与Git Submodule的对比与选择  LINUX怎么设置定时任务_LINUX crontab配置教程  msn官网入口地址手机版 msn官方网站手机最新链接  漫蛙2在线漫画入口 漫蛙正版漫画网页版直达  Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法  “音游” × “怪文书” 题材的节奏冒险游戏 《晕晕电波症候群》确定于2026年4月发售!  Golang如何使用net/url解析URL_Golang URL解析与处理方法  Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址  在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案  PHP教程:高效从URL路径中提取倒数第二个片段  PHP中高效并行检查多链接状态的教程  J*a里如何使用forEach遍历Map_Map遍历方法说明  如何在Promise链中优雅地中断后续then执行  NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰  Python实时数据流中的动态最值查找策略 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!