-
什么是EnumSet

从上图可以看出,EnumSet是个抽象类,继承AbstractSet,然后有两个具体子类分别为RegularEnumSet和JumboEnumSet,并且EnumSet只能存放Enum类别的对象。另外我们再看Thinking in java的一句话:EnumSet的设计充分考虑到了速度因素,因为它必须与非常高效的bit标志相竞争。从这句话可以看出,EnumSet是非常之快的,事实上,它的查询速度和插入速度都为O(1)。 -
获取EnumSet对象的方法
因为EnumSet是抽象类,不可以直接new,而是采用静态工厂方法来产生对象的,下面介绍几个常用的静态方法:
noneOf(Class elementType):创建一个指定枚举类型的EnumSet,不含任何元素
allOf(Class elementType):创建一个指定枚举类型的EnumSet,包含所有元素
后面一些的其他的方法都是基于上面两个的整合 -
为什么EnumSet很快
我们HashSet是基于散列表实现的,TreeSet是基于树实现的,它们的速度都没有EnumSet快,因为它的内部是基于long值作为比特向量,是直接通过比较而二进制来实现的,所以会超级的快。直接看源码:
3.1 获取实例的工厂方法

从方法很容易看出,如果这个这个枚举的数量小于等于64的时候,则直接用RegularEnumSet,否则JumboEnumSet。其实这两个类还是有很多共性的,主要的区别是因为一个long值只有64位,所以RegularEnumSet是只有一个long值作为比特向量,而JumboEnumSet使用long数组作为比特向量。因为两个类很多方法是差不多的,主要是一些针对下标超过64的会相应的定位到下一个数组位置,为了简单,我就是只为大家讲解RegularEnumSet的一些方法,如果大家感兴趣的话,直接去另外一个源码。
3.2 新增add

新增其实很简单,就是把1带符号左移当前枚举值的下标(假如下标为3)得到的值v1(0X100)与原先的值elements(假如是0X001)进行或运算,则得到后的新值为0x101,则代表当前枚举的第一个和第三个放入了容器。这就是为什么EnumSet很快的原因,因为没有真的放入一个对象,只是简单的记录一个标志位。
3.3 移除remove

其实也是差不多的,先进行类型校验,再根据下标左移得到值v1(0x100),再把v1取非得到v2(0x011),在和elements(0x101)进行与运算得到最终的值(0x001)。
3.4 包含contains

前面还是一样的方法获取到v1(0x100),然后与elements(0x001)取与得到v2(0x000),再判断v2是不是!=0。 -
结语
虽然EnumSet的应用场景很少,但是我觉得这个东西还是有很多的参考价值的,不管是从设计模式上还是从提高性能的思路上,都有很多值得学习的,这个世上不缺好的东西,只缺善于发现的眼睛。另外如果大家想深入研究的话,可以看该博文具体详情可参考该博文。
相关推荐
YOLO26算法心电图十二导联目标检测+训练好的模型+368张数据集+pyqt可视化界面.zip
附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[导联I(I), 导联II(II), 导联III(III), 胸导联V1(V1), 胸导联V2(V2), 胸导联V3(V3), 胸导联V4(V4), 胸导联V5(V5), 胸导联V6(V6), 加压肢体导联aVF(aVF), 加压肢体导联aVL(aVL), 加压肢体导联aVR(aVR)] · 训练集:313 张 · 验证集:37 张 · 测试集:18 张 · 总计:368 张 该数据集聚焦于临床心电图信号的精准识别与定位,其核心检测目标为标准12导联心电图中的各个独立导联波形区域,涵盖肢体导联(I、II、III)与加压肢体导联(aVR、aVL、aVF),以及胸前导联(V1至V6),适用于心电图自动分析系统中对各导联位置的快速准确标注与分类。数据采集场景真实还原了医院心电图室或急诊监护环境下的标准心电图记录纸,波形清晰、基线稳定,具有高度临床参考价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 57 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9708** mAP50-95 | 0.6344 Precision | 0.8990 Recall | 0.9191 train/box_loss | 1.2231 train/cls_loss | 0.9703 val/box_loss | 1.2779 val/cls_loss | 0.... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。
EnumSet源码解析
来源: Java编程的逻辑 EnumSet EnumSet的实现与EnumMap没有任何关系,而是用极为精简和高效的位向量实现的; 位向量是计算机程序中解决问题的一种常用方式 1 实现原理 1.1 内部组成 final Class<E> elementType;//类型信息 final Enum[] universe;//枚举类的所有枚举值 EnumSet自身没有记录元素个数的变量,...
企业级AI助手平台 开箱即用的全栈AI平台,支持多智能体协同、Supervisor模式编排、多种决策模式、RAG技术和流程编排能力 支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化
企业级AI应用开发框架,支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化能力,提供可视化流程编排、自主决策智能体与多智能体协同调度,兼容主流 Agent Skill 协议,帮助企业与开发者零门槛快速构建安全、高效、可落地的AI智能体应用与行业解决方案。
JDK源码解读之RegularEnumSet
主要内容转载自usafchn's Notes,然后在此基础上做了一些补充。 缘由 今天做项目的时候偶然用到EnumSet,EnumSet平时不太常用,比较陌生,于是点进去看了下源码,发现这个类还是比较有意思的,首先EnumSet是个抽象类,当我们调用EnumSet提供的静态函数创建对象的时候,实际创建的是RegularEnumSet或者JumboEnumSet,前者对应
Java低代码, 轻量级, 支持国产化 国密 AI大模型MCP服务 商业免费 包括核心模块如:组织机构、角色用户、权限授权、数据权限、内容管理、工作流、Spring Cloud 微服务、AI大模型等
Java低代码, 轻量级, 支持国产化 国密 AI大模型MCP服务 商业免费 Spring Boot, MyBatis, Flowable, TypeScript, Vue, Antdv, 包括核心模块如:组织机构、角色用户、权限授权、数据权限、内容管理、工作流、Spring Cloud 微服务、AI大模型、代码生成器等
文创媒体电商行业智算中心(AIDC)建设规划方案.pptx
文创媒体电商行业智算中心(AIDC)建设规划方案.pptx
构建智能世界:从物联网架构到实战落地的系统性工程指南
物联网技术通过连接物理设备与数字世界,实现数据的采集、传输与智能处理,其核心价值在于构建一个可感知、可分析、可控制的智能系统。从技术原理上看,它依赖于分层解耦的架构设计,将复杂的系统划分为感知层、网络层、平台层和应用层,并通过微服务化与API化实现能力的灵活组合与复用。这种架构模式能有效支撑海量设备接入与数据处理,其技术价值体现在提升业务自动化水平、优化资源利用和创造新的服务模式上,广泛应用于智慧城市、工业互联网和企业数字化转型等场景。本文聚焦于如何将这一系统性工程落地,深入探讨了以**中台思维**构建共享
集团企业数字化转型AI智能体平台规划及场景应用方案.pptx
集团企业数字化转型AI智能体平台规划及场景应用方案.pptx
java enumset_Java中的EnumSet – RegularEnumSet与JumboEnumSet
Java中的EnumSet是Set 接口的特殊实现,是在Java 1.5语言中首次引入Enum时 将其 添加回Java 1.5中的。 令人惊讶的是,在Java 1.5发行版(2004年9月30日发行,代号为Tiger)的许多年之后,许多Java程序员仍然不知道所引入的几个好功能。 EnumSet 就是这样的示例之一,与 Enum常量的 其他 Set 实现 相比,它确实非常有用并且提供了更高的性...
基于动态窗口法DWA的机器人路径规划研究(Matlab代码实现)
内容概要:本文系统研究了基于动态窗口法(DWA)的机器人局部路径规划算法,深入剖析其在动态环境中实现自主避障与实时轨迹优化的核心机制。文章详细阐述了DWA算法的速度空间采样策略、轨迹预测模型、动力学约束处理及多目标代价函数的设计原理,并通过构建完整的Matlab仿真框架验证算法有效性。结合典型场景的仿真实验,展示了机器人在复杂障碍物环境下如何实时生成安全、平滑且符合运动学约束的最优路径,充分体现了DWA在移动机器人导航中的实用性与鲁棒性。; 适合人群:具备机器人运动规划基础知识和Matlab编程能力,从事智能移动机器人、自动驾驶或服务机器人研发的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解DWA算法的理论基础与实现细节;②掌握机器人局部路径规划的仿真实现方法;③为实际机器人系统的导航模块开发提供可复用的算法原型与代码参考;④作为进一步研究高级导航算法(如TEB、MPC)的技术基础。; 阅读建议:建议结合提供的Matlab代码逐模块分析与调试,重点关注速度采样、轨迹积分、障碍物距离计算及代价评估等关键环节,通过调整参数在不同地图环境中进行对比实验,以深刻把握算法性能与参数之间的关系,进而提升对实时路径规划系统设计的理解与应用能力。
【轴承故障诊断】用于轴承故障诊断的集中时频分析研究(Matlab代码实现)
内容概要:本文系统研究了用于轴承故障诊断的集中时频分析技术,重点解决了传统时频分析方法在处理非平稳信号时存在的能量分散与分辨率不足等问题。通过引入集中时频分析方法,能够有效聚焦信号能量,精确提取轴承故障特征频率,提升故障识别的准确性与时效性。文章详细阐述了该方法的理论基础,并结合仿真信号与实际实验数据验证其优越性能,同时提供了完整的Matlab代码实现流程,涵盖信号预处理、时频变换、参数优化及结果可视化等环节,便于读者复现与拓展应用。; 适合人群:具备一定信号处理理论基础和Matlab编程能力的研究生、科研人员,以及从事机械设备状态监测、故障诊断与预测性维护工作的工程技术人员。; 使用场景及目标:①应用于电机、风机、齿轮箱等旋转机械的早期轴承故障检测,实现故障预警;②提升工业设备运维系统的智能化水平,支撑预测性维护体系构建;③作为高校或研究机构在信号处理、机械故障诊断等课程中的教学案例与实践素材。; 阅读建议:建议读者结合文中提供的Matlab代码逐段运行与调试,深入理解集中时频分布的生成机制及其关键参数(如核函数选择、平滑窗口大小)对诊断效果的影响,并尝试将其应用于其他类型的机械故障信号分析中,开展对比研究以深化对该方法适用性的认识。
Enum、EnumMap、EnumSet的用法讲解
今天在工作中遇到这样一个问题,要在前台页面上渲染出来所有的枚举元素,但是前台页面用的是Velocity,所以需要把枚举元素放到Map里,然后在前台进行渲染。这里不能一个一个的取出枚举元素来put的,就想能用一个循环能搞定这个。发现枚举类有一个方法values,正好可以满足我的需求。OK话不多说我们一个一个的介绍其中主要的方法。 先看定义的枚举类: p...
2024 《计算机网络》实验教学指导书.doc
2024 《计算机网络》实验教学指导书.doc
关于枚举,enum、Enum、EnumSet、RegularEnumSet、JumboEnumSet
Apache Commons Lang。 在版本3中,enum相关的工具就留下EnumUtils。 首先, 所有enum,都默认实现了抽象类 java.lang.Enum 。所以,所有enum都具备Enum中的方法,而且,还有一个values()方法,虽然找不到,但的确可以使用。 其次, JDK提供了 java.util.EnumSet ,专门用于存储同一个enum类型的常量(需要指出,enu...
Frida实战:高效dump Android内存中的so文件与修复技巧
本文详细介绍了使用Frida工具dump Android内存中已解密so文件的实战技巧。针对加固应用静态分析失效的痛点,文章提供了从环境搭建、使用frida_dump脚本自动化抓取内存数据,到利用SoFixer工具修复ELF文件结构的完整流程,帮助逆向分析人员高效获取可分析的so文件。
ORBSLAM3运行记录(单目+IMU)
ORBSLAM3运行记录1.单目+IMU数据集运行记录自己做的其它测试2.单目+IMU自己采集数据运行记录测试结果 1.单目+IMU数据集运行记录 ORBSLAM3没有预留ROS下单目+IMU的结点,这个需要自己去写代码添加,可以参考这篇博客,《ORBSLAM3 用ROS接口运行双目IMU和单目IMU模式》。我的ROS结点为Mono-IMU,字典文件ORBvoc.txt在ORBSLAM3 / Vocabulary文件夹中,配置文件EuRoC.yaml在ORB_SLAM3 / Examples / Monoc
工厂模式-以EnumSet源码为例
java.Util.EnumSetpublic static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType) { EnumSet<E> result = noneOf(elementType); result.addAll(); ...
AUTO-DL平台快速部署BEVFormer:Nuscenes数据集完整训练避坑指南
本文详细介绍了在AUTO-DL平台高效部署BEVFormer模型并利用Nuscenes数据集进行完整训练的实战指南。重点解析了平台数据管理、环境配置、数据集迁移解压、预处理及训练启动等全流程中的关键步骤与常见避坑技巧,帮助研究者和工程师快速复现这一前沿视觉感知模型,节省云端训练时间与成本。
EnumSet源码分析
核心:long(long数组) 和 位运算, 其存储结构elements并未直接存枚举本身,而是位标识,枚举存于elementType中的enumConstants中. 1、内部元素为枚举; 2、内部表示为位向量,使用“位标志”的替换形式。(类似0x1000000,按bit存储,用位运算进行相关操作); 3、全部是静态方法s...
怎么用phpstudy制作网站
随着实践的深入,你会逐渐掌握更多高级技巧和技术,让你的网站变得更加完善和吸引人。现在你已经成功设置了你的本地Web服务器环境,接下来我们将指导你如何利用这个环境来创建一个简单的PHP网页项目。为了使网站更加动态且功能丰富,我们需要学会如何让PHP脚本与MySQL数据库交互。为了让网站看起来更专业美观,可以考虑引入CSS样式表来定制网页布局及视觉效果。当你对本地开发的网站感到满意后,下一步就是将其发布到互联网上供他人访问了。让我们进一步扩展我们的网站,加入一个简单的用户注册与登录系统。
【学习笔记】无人机(UAV)在3GPP系统中的增强支持(四)-无人机系统(UAS)命令与控制(C2)通信用例
UTM向5G网络提供无人机系统C2通信所需的信息,例如服务类别、无人机系统服务的流量类型、授权的无人机系统服务所需的QoS以及无人机系统服务的订阅。遵循模型B的网络辅助C2模型,为了确保UAS操作的C2通信的服务可用性和可靠性,特别是当无人机在操作员的视线之外(BLOS)飞行时,为无人机提供支持冗余的C2通信链路。如果需要创建额外的C2通信连接或更改现有数据连接的配置以进行C2通信,则5G网络会根据无人机系统的授权服务信息和C2通信中所需的QoS和优先级,修改或分配一个或多个C2通信流量的QoS流。
枚举集合的EnumSet
在上一篇博客文章中,我们发现了EnumMap用于带有枚举键的映射。 您可能已经观察到,还有一个专门针对枚举优化的Set : EnumSet 。 我们再次定义一个CoffeeType枚举: public enum CoffeeType { ESPRESSO, POUR_OVER, FRENCH_PRESS, LATTE, FLAT_WHITE } 现在,我们可以使用EnumSe...
基于 LSTM 的船舶轨迹预测,单步预测
基于 LSTM 的船舶轨迹预测,单步预测
努力的小胖学习记录(七)-------Java序列化
什么是java系列化? 为了对象能够在网络间传输(如rpc,rmi等),将对象转换为二进制流的过程称为序列化。同样的,将二进制流转换为对象的过程称为反序列化。 Java系列化的几种方法? 实现Serializable接口 这是大家最常见的一种也是最简单的一种方式,该接口没有任何方法,实现了该接口的对象可以直接使用ObjectOutputSteam的writeObject方法写到流里面,然后调...
2026工控高薪:C#上位机面试15题(含答案)
基础岗(10-15K):考察串口/Modbus/PLC通信基础;资深岗(20-30K):考察工业级优化(抗干扰/断线重连)、物联网(MQTT)、跨协议整合;架构岗(30K+):考察上位机架构设计、边缘计算、项目落地避坑。我整理了2026年近20场高薪岗位(月薪20K+)的面试高频题,筛选出15道核心题,每题标注“考察点+实战答案”——答案拒绝纯理论,全部结合车间现场、PLC通信、物联网落地等真实场景,帮你避开“背答案但不落地”的面试坑。
基于MATLAB的BOC调制信号捕获算法仿真
然而,在实际的使用过程中,由于室内信号衰减以及遮挡等因素的影响,接收机在GPS信号弱化时会很容易丢失导航信息。与其他的调制方式相比,BOC具有较好的抗多径性能和更高的频带效率。通过本文的介绍,我们可以更加深入地了解BOC调制信号的捕获算法,并且掌握了如何使用MATLAB软件对其进行仿真实现。通过实验数据的分析,我们可以看出该算法对于BOC调制信号的捕获具有较高的准确率和稳定性,因此具有一定的工程应用价值。在BOC调制完成后,我们需要进行信号的捕获,这一步涵盖了信号检测、码偏差估计、载波频率估计等过程。
248



被折叠的 条评论
为什么被折叠?



