新闻中心

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的使用的详细内容,更多请关注其它相关文章!


# 能让  # 厦门企业网站推广服务  # 网络推广网站优化怎么做  # 聊城建设网站案例  # 娄底湖南网站优化推广  # app推广营销环境分析  # 项目找营销推广团队  # 安徽网站网络推广哪个好  # uoee网站优化  # 网站建设业绩任务怎么写  # 呈贡区seo中介  # 推荐给  # java  # 中文网  # 相关文章  # 类属  # 适用于  # 多个  # 也不  # 高性能  # 网上  # 内存占用  # ai 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 58动漫网在线官方网 58动漫网正版动漫入口网址  处理嵌套交互式控件:前端可访问性指南  c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  QQ邮箱正确登录入口_QQ邮箱官方网站使用地址  蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源  天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】  taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】  漫蛙网页登录入口 漫蛙漫画官方授权网址  J*aScript DOM操作:高效清空列表元素的策略与实践  Yandex浏览器官方网页版入口 Yandex浏览器最新版官网  漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站  如何在Promise链中优雅地中断后续then执行  品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程  MAC怎么在地图App里使用“四处看看”_MAC体验部分城市的3D实景街景  怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】  css链接悬停下划线样式如何自定义_使用::after结合content和transition  J*aScript类型检查_j*ascript代码规范  树莓派传感器触发:通过Twilio API发送WhatsApp消息教程  最新韩小圈网页版登录入口_官网在线观看官方链接  Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明  Go语言中JSON数据解析与字段访问教程  PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误  age动漫网站入口 age动漫官网直接访问入口  如何使用Go和Martini动态服务解码后的图片  如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践  绝地鸭卫平a核爆刀流玩法攻略  Django通过AJAX异步上传图片并保存至模型的完整指南  AO3访问入口汇总 AO3网页版同人作品一键直达  html5 app怎么运行环境_配html5 app运行环境【教程】  C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器  sublime怎么设置启动时打开的窗口_sublime会话管理与热退出  mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析  为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法  大麦的“候补”是什么意思 大麦候补购票规则【详解】  微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法  谷歌google账号注册详细步骤 谷歌账号注册官方教程  微博网页版主页入口 微博官方网站免登录访问  邮政快递包裹最新位置 邮政快递实时追踪入口  迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法  如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力  C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入  css绝对定位元素脱离父容器怎么办_确保父元素position非static  漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端  Golang如何使用buffered channel提高性能_Golang buffered channel优化技巧  React Hooks最佳实践:动态组件状态管理的组件化方案  照顾宝贝2小游戏免费秒玩入口  Angular中单选按钮的正确使用与常见陷阱解析  AO3最新可访问网址 Archive of Our Own官方在线入口  Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址 

搜索