K:java枚举的常见用法

蓝桥杯——我该如何枚举 蓝桥杯十道题,前面五道都是填空题,填空题只需要填上答案就可以。很多人并没有使用或者第一时间选择枚举,难道是害怕超时吗?经过了解几个小伙伴的想法后才知道原来大家不是不想用枚举,也不是不了解枚举,而是不知道该如何进行有效的枚举。由此可见,暴力枚举在蓝桥杯中占比较大,而且能够轻松得分,小伙伴们学废了吗... 阅读详情

@转载自:http://www.cnblogs.com/felicityxi/p/6710231.html和http://blog.youkuaiyun.com/zknxx/article/details/51884536

用法一:常量

在JDK1.5 之前,我们定义常量都是: publicstaticfianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

 

public enum Color {  
      RED, GREEN, BLANK, YELLOW  
    }  

用法二:switch

JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

 

   enum Signal {  
        GREEN, YELLOW, RED  
    }  
    public class TrafficLight {  
        Signal color = Signal.RED;  
        public void change() {  
            switch (color) {  
            case RED:  
                color = Signal.GREEN;  
                break;  
            case YELLOW:  
                color = Signal.RED;  
                break;  
            case GREEN:  
                color = Signal.YELLOW;  
                break;  
            }  
        }  
    }  

 

用法三:向枚举中添加新方法

如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且Java要求必须先定义enum实例。

 

public enum Color {  
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
        // 成员变量  
        private String name;  
        private int index;  
        // 构造方法  
        private Color(String name, int index) {  
            this.name = name;  
            this.index = index;  
        }  
        // 普通方法  
        public static String getName(int index) {  
            for (Color c : Color.values()) {  
                if (c.getIndex() == index) {  
                    return c.name;  
                }  
            }  
            return null;  
        }  
        // get set 方法  
        public String getName() {  
            return name;  
        }  
        public void setName(String name) {  
            this.name = name;  
        }  
        public int getIndex() {  
            return index;  
        }  
        public void setIndex(int index) {  
            this.index = index;  
        }  
    }  

 

用法四:覆盖枚举的方法

下面给出一个toString()方法覆盖的例子。

 

public enum Color {  
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
        // 成员变量  
        private String name;  
        private int index;  
        // 构造方法  
        private Color(String name, int index) {  
            this.name = name;  
            this.index = index;  
        }  
        //覆盖方法  
        @Override  
        public String toString() {  
            return this.index+"_"+this.name;  
        }  
    }  


 

用法五:实现接口

所有的枚举都继承自java.lang.Enum类。由于Java不支持多继承,所以枚举对象不能再继承其他类。

 

public interface Behaviour {  
        void print();  
        String getInfo();  
    }  
    public enum Color implements Behaviour{  
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
        // 成员变量  
        private String name;  
        private int index;  
        // 构造方法  
        private Color(String name, int index) {  
            this.name = name;  
            this.index = index;  
        }  
    //接口方法  
        @Override  
        public String getInfo() {  
            return this.name;  
        }  
        //接口方法  
        @Override  
        public void print() {  
            System.out.println(this.index+":"+this.name);  
        }  
    }  

用法六:使用接口组织枚举

public interface Food {  
        enum Coffee implements Food{  
            BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO  
        }  
        enum Dessert implements Food{  
            FRUIT, CAKE, GELATO  
        }  
    }  


 

用法七:关于枚举集合的使用

如下内容有用到的代码:

public enum EnumTest01 {  
      
    UPDATE(1,"更新"),QUERY(2,"查询"),DELETE(3,"删除");  
    private Integer enumValue;  
    private String enumDesc;  
      
    private EnumTest01(Integer enumValue, String enumDesc) {  
        this.enumValue = enumValue;  
        this.enumDesc = enumDesc;  
    }  
      
    public int getEnumValue(){  
        return this.enumValue;  
    }  
      
    public String getEnumDesc(){  
        return this.enumDesc;  
    }  
}  


EnumMap

Map的实现类有很多种,EnumMap从名字我们可以看出这个Map是给枚举类用的。它的key为枚举元素,value自定义。在工作中我们也可以用其他的Map来实现我们关于枚举的需求,但是为什么要用这个EnumMap呢?因为它的性能高!为什么性能高?因为它的内部是用数组的数据结构来维护的!我们可以看一下它的源码实现:

put方法

public V put(K key, V value) {  
        typeCheck(key);  
      
        int index = key.ordinal();  
        Object oldValue = vals[index];  
        vals[index] = maskNull(value);  
        if (oldValue == null)  
            size++;  
        return unmaskNull(oldValue);  
    }  


typeCheck是用来检查key的类型的,因为key只能为枚举元素。接下来的这一句int index = key.ordinal();key.ordinal()这个就是我们上面说的枚举类型的序号,然后被当做数组的下标,放到vals这个数组里。那么get方法呢?

get方法

public V get(Object key) {  
        return (isValidKey(key) ?  
                unmaskNull(vals[((Enum<?>)key).ordinal()]) : null);  
    }  


注意这一句话:vals[((Enum<?>)key).ordinal()]。这个不就是取得下标,根据下标获取数组中的值吗?!

remove方法

public V remove(Object key) {  
        if (!isValidKey(key))  
            return null;  
        int index = ((Enum<?>)key).ordinal();  
        Object oldValue = vals[index];  
        vals[index] = null;  
        if (oldValue != null)  
            size--;  
        return unmaskNull(oldValue);  
    }  


remove方法的实现也是挺简单的,就是把相应下标的元素变为null,等着GC回收。

EnumSet

EnumSet这是一个用来操作Enum的集合,是一个抽象类,它有两个继承类:JumboEnumSet和RegularEnumSet。在使用的时候,需要制定枚举类型。它的特点也是速度非常快,为什么速度很快呢?因为每次add的时候,每个枚举值只占一个长整型的一位。我们可以翻看源码来看看它的实现:

add方法

    public boolean add(E e) {  
        typeCheck(e);  
      
        long oldElements = elements;  
        elements |= (1L << ((Enum<?>)e).ordinal());  
        return elements != oldElements;  
    }  

从中我们可以看出是先对一个长整型左移枚举类型的序列数,然后再和长整型 或 。
ps:其中值得我们引起注意的代码的实现是1L<<((Enum<?>)e).ordinal());这段代码,其实现了每个元素仅占一位的效果。

of方法

of方法有好几个重载的方法,它的作用是创建一个最初包含指定元素的枚举 set。
EnumSet<EnumTest01> enumSets = EnumSet.of(EnumTest01.DELETE);  


allOf

创建一个包含指定元素类型的所有元素的枚举 set。
    EnumSet<EnumTest01> enumSets = EnumSet.allOf(EnumTest01.class);  



range方法

创建一个指定范围的Set。
    EnumSet<EnumTest01> enumSets = EnumSet.range(EnumTest01.DELETE,EnumTest01.UPDATE);  



noneOf方法

创建一个指定枚举类型的空set。
    EnumSet<EnumTest01> enumSet = EnumSet.noneOf(EnumTest01.class);  
    enumSet.add(EnumTest01.DELETE);  
    enumSet.add(EnumTest01.UPDATE);  
    for (Iterator<EnumTest01> it = enumSet.iterator(); it.hasNext();) {  
        System.out.println(it.next().getEnumDesc());  
    }  
    for (EnumTest01 enumTest : enumSet) {  
        System.out.println(enumTest.getEnumDesc() + "  ..... ");  
    }  

copyOf方法

创建一个set的并copy所传入的集合中的枚举元素。
EnumSet<EnumTest01> enumSets = EnumSet.copyOf(enumSet);  




2023-07-04 Fast-Lio论文中公式(6)与BCH公式中近似雅可比公式的一致性推导 将(1)式代入(6)式,就有。 阅读详情

相关推荐

基于NXP BFU730F的宽带WiFi LNA设计:从原理到实测的完整指南

低噪声放大器(LNA)是无线通信接收链路中的关键器件,其性能直接决定了系统的接收灵敏度。LNA的核心原理是在放大微弱信号的同时,尽可能降低自身引入的噪声,并保持良好的线性度以应对强干扰。在宽带应用场景下,如覆盖2.4GHz至5.9GHz的现代WiFi系统,设计需在宽带匹配、噪声优化和增益平坦度之间取得精妙平衡。本文以NXP的BFU730F SiGe:C HBT晶体管为核心,深入解析一种采用电阻反馈和LC匹配网络的经典宽带LNA架构。该设计通过优化反馈网络,在宽达3.5GHz的频带内实现了优异的噪声系数(低至

weixin_33587161的博客 328

iOS枚举(位移枚举)

什么是枚举在程序设计语言中,一般用一个数值来代表某一状态,这种处理方法不直观,易读性差。如果能在程序中用自然语言中有相应含义的单词来代表某一状态,则程序就很容易阅读和理解。也就是说,事先考虑到某一变量可能取的值,尽量用自然语言中含义清楚的单词来表示它的每一个值,这种方法称为枚举方法,用这种方法定义的类型称枚举类型。枚举的命名定义的枚举类型名称通常与项目的类文件前缀相同,或者是类库框架缩写,或者跟随具

Japho 924

移动端抓包实战指南:从HTTPS解密到QUIC协议与证书绑定破解

HTTPS作为保障网络通信安全的核心协议,其工作原理基于TLS/SSL加密与证书信任链验证。在移动应用开发与测试中,抓包是调试接口、分析性能、排查问题的关键技术手段。然而,随着移动端安全性的提升,传统的代理抓包方法常因证书绑定、HTTP/3/QUIC协议等挑战而失效。这要求开发者掌握分层诊断思维,协同使用代理工具、协议分析工具及底层流量捕获工具。例如,面对证书绑定导致的流量不可见,需借助Wireshark进行协议层分析;针对基于UDP的QUIC协议,则需使用支持该协议的抓包工具或临时禁用特性。本文聚焦移动端

weixin_27722377的博客 299

C语言入门(二十)之枚举

C语言中,枚举就是专门用于表示几种固定类型的取值。枚举的本质就是基本数据类型, 就是整形。 枚举和结构体一样, 要想定义枚举类型变量, 那么必须先定义枚举类型。 枚举类型定义的格式   enum 枚举类型名称 { 取值, }; // 1.定义枚举类型 enum Gender { male = 9, // 男 默认情况下, ...

清风吹过脸庞 335

保姆级教程:用Kalibr搞定Intel D435i三目(RGB+双目)相机联合标定,附完整ROSbag录制避坑指南

本文详细介绍了如何使用Kalibr工具对Intel D435i三目相机(RGB+双目)进行高精度联合标定,包括硬件准备、ROSbag录制技巧、Kalibr标定实战及结果验证。特别针对实际工程中的常见问题提供了解决方案,帮助开发者提升SLAM和三维重建等应用的精度。

weixin_42524762的博客 405

Cadence17.4 Allegro PCB制板(gerber / 光绘)文件输出的顺序及注意点

Cadence Allegro PCB制板文件输出 (gerber 光绘文件输出)

weixin_45331044的博客 1万+

Java枚举的使用

枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中。此外,枚举类型还提供了安全检查功能。枚举类型本质上还是以类的形式存在。 1、使用枚举类型设置常量 以往设置常量,通常将常量放置在接口中,这样在程序中就可以直接使用了,并且该常量不能被修改,因为在接口中定义的常量时,该常量的修饰符为final与static。 public interface Constants { public...

pan_junbiao的博客 2万+

【Python计量】linearmodels面板数据回归(一)

我们以伍德里奇《计量经济学导论现代方法》的”第14章高级面板数据方法“的案例14.1为例,使用jtrain中的数据来进行固定效应估计。

mfsdmlove的博客 9277

【Java】枚举

枚举 文章目录枚举1、枚举(JDK1.5引入的)2、语法格式3、在其他类中如何获取枚举的常量对象4、枚举类型的特点5、父类java.lang.Enum类型 1、枚举(JDK1.5引入的) 类似:列举,穷举,一一罗列。 Java枚举:把某个类型的对象,全部列出来 当什么情况下会用到枚举类型? 当某个类型的对象是固定的,有限的几个,那么就可以选择使用枚举。 在整个系统的运行期间,有且只有这几个对象。 枚举类型的对象是有限、固定的几个常量对象。 例如: 星期 Week,它的对象只有7个:Monday,Tue

渐若窥宏大的博客 381

java毕设:基于springboot的服装搭配推荐系统(springboot+layui+jq+html)1011

项目描述 基于springboot的服装搭配推荐系统: 基于天气服装搭配推荐系统为用户提供未来一周的天气预报情况,并根据预报天气和用户现有的服装进行着装搭配,以及显示未来6小时精确温度数据为用户提供更精确的天气信息便于用户在出行前对自己的着装进行调整,每日用户可以根据自己当日对系统推荐的着装搭配舒适度进行反馈,系统将根据用户的反馈对用户着装的保暖系数进行相应调整,通过多次的反馈和调整形成对用户着装的个体化和精确化的推荐。 本系统可以为用户提供以下服务: 1.未来五天的天气信息显示; 2.未来六小时内天气温度

qq_2537071370的博客 3647

【干货】SAP特殊库存:Q库存(项目库存)全解析,搞懂ETO模式的核心!

在 SAP 系统中,

我小时候很黑的博客 912

java枚举k,v转换

java枚举k,v转换 import org.apache.commons.lang.StringUtils; public enum ProcessStatus{ BANK_ACT("银行已受理", 0), INIT("交易初核", 1), BANK_PAY("银行已先行垫付", 2), INFO_CHECK("交易信息核查中", 3),

星星的专栏 1417

禾赛激光雷达AT128P/海康相机(1):ROS环境设备驱动

sudo cp *.so /opt/MVS/lib/64/ # 复制当前文件夹中所有.so文件 到 “/opt/MVS/lib/64/” 文件中。将相应的.so文件复制到 /opt/MVS/lib/64/。我解压的是x86_64的,解压之后,打开,再解压MVS。然后在上一层,也就是选择x86_64那一层打开终端。新建一个工作空间,或者打开自己的工作空间。)包放在src内,并解压,然后编译。MVS V2.1.2下载之后解压,// 驱动代码下载到src文件里面。// 特定文件夹中打开终端。

努力努力努力 883

K:java中枚举的常见用法

用法一:常量   在JDK1.5 之前,我们定义常量都是: public static fianl....。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch   JDK1.6之前的switch语句只...

diaosangwan0363的博客 164

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java 枚举的用法及实际使用场景

枚举(enum)是 Java 中一种特殊的类,用于定义一组固定的常量。枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景。枚举常量是的,可以直接通过枚举类名访问。通过enumpublic enum 枚举名 {常量1,常量2,常量3;例如:星期另外,枚举还可以定义属性和方法,甚至可以定义构造函数。ACTIVE(1, "激活"),INACTIVE(2, "未激活");// 枚举的构造函数枚举类继承自,有一些自带的方法:比如name()ordinal()

qq_37335441的博客 2133

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java枚举的高级用法之多键值的映射使用

枚举Enum单映射使用 做Java的各位仁兄姐妹都知道,Java通过HashMap,以及枚举提供了方便的K-V映射功能,例如 枚举单映射使用 但是如果遇到多个键值映射,例如K-K-V的形式怎么办呢?可能有些人会说那还是用HashMap呗,对于需求的满足倒是可以,但是不够优雅直观,可读性不高!下面让我们一睹枚举的高级用法之多键值的映射风采。 枚举Enum多键值映射使用 譬如这个四合一智能门锁场景,可能其他微服务或第三方的键值映射是上面单映射那样的,但是由于历史原因或者是自身强迫症使能,总之就是对

爱码僧的博客 6037

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java 枚举(enum) 详解7种常见的用法

https://blog.youkuaiyun.com/qq_27093465/article/details/52180865 版权声明:觉得此文有用的,不嫌麻烦的,就留个言呐,或者点个赞呐(额,就是文章底部的“顶”啦),要是嫌弃麻烦呢,也麻烦点个赞嘛,要是实在不想点赞呢,也不是不可以。 但是,你要是想踩...

s297485987的专栏 331

枚举详解之EnumSet、EnumMap用法

枚举简单例子 /** * @author shuliangzhao * @Title: Color * @ProjectName design-parent * @Description: TODO * @date 2019/6/12 22:35 */ public enum Color { YELLOW, RED, BLUE, PURPLE, ...

境里婆娑 638

java enum用法_Java枚举的高级用法之多键值的映射使用

枚举Enum单映射使用做Java的各位仁兄姐妹都知道,Java通过HashMap,以及枚举提供了方便的K-V映射功能,例如枚举单映射使用但是如果遇到多个键值映射,例如K-K-V的形式怎么办呢?可能有些人会说那还是用HashMap呗,对于需求的满足倒是可以,但是不够优雅直观,可读性不高!下面让我们一睹枚举的高级用法之多键值的映射风采。枚举Enum多键值映射使用譬如这个四合一智能门锁场景,可能其他微服...

weixin_39602967的博客 924

Java 枚举的用法及实际使用场景_java enum类用法,零基础入门到精通,收藏这篇就够了

枚举(enum)是 Java 中一种特殊的类,用于定义一组固定的常量。枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景。枚举常量是的,可以直接通过枚举类名访问。通过enumpublic enum 枚举名 {常量1,常量2,常量3;例如:星期另外,枚举还可以定义属性和方法,甚至可以定义构造函数。ACTIVE(1, "激活"),INACTIVE(2, "未激活");// 枚举的构造函数枚举类继承自,有一些自带的方法:比如name()ordinal()

Python_0011的博客 750

c枚举类型enum用法(java 枚举类型enum用法)

C中的枚举类型有什么特点呢? 我们利用C中的枚举类型定义了在扫描程序中的记号;为了避免涉及到特定实现语言(C)中表示记号的细节,就使用了正则表达式本身来表示记号 如何使用java语言中的枚举enum? package com.entity.bean; public enum Flavor sweet ...

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 557

java实现枚举

枚举算法也叫暴力算法,是一种简单直接的问题求解方法,它通过逐一列举问题的所有可能解,并检查每个可能解是否符合问题的条件,直到找到正确的解或者遍历完所有可能的情况。对于一个问题,首先确定解的范围,然后在这个范围内逐个尝试所有可能的值,例如,在寻找一个整数 n 的所有因数时,枚举算法会从1开始,逐个检查到 n ,判断每个数是否能整除 n。

2301_81490350的博客 1958

【Java】枚举类转换封装

文章目录1 K,V枚举转换器2 属性与枚举转换器3 使用样例 1 K,V枚举转换器 当枚举为K,V模式的时候,通过K,V获取对应的枚举对象需要继承BaseEnum import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public interface BaseEnum<K, V> { K getKey(); V getValue(); static

你好丶下一秒 1218

java Enum枚举

介绍 最近在写TLS连接,里边有用到大量的有关联的参数,起初用常量字符串定义,不好管理,后面就想到用枚举,好久没有用过枚举,正好借这个机会复习一下。 jdk从1.5开始提供枚举(enum),枚举的本质是将当前类自动继承java.lang.Enum,Enum是一个抽象类,当我们创建enum时,编译器负责解析 简单枚举 public enum TestEnum { MON,TUE,WED,...

u010548207的博客 205

枚举用法

import java.util.EnumSet; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** 工作状态枚举 @author majian @version V1.0 @since 2017-11-23 19:13 */ public enum EnumDemo { PENDIN...

k_x_sh的博客 163

java return用法_Java枚举的高级用法之多键值的映射使用

枚举Enum单映射使用做Java的各位仁兄姐妹都知道,Java通过HashMap,以及枚举提供了方便的K-V映射功能,例如枚举单映射使用但是如果遇到多个键值映射,例如K-K-V的形式怎么办呢?可能有些人会说那还是用HashMap呗,对于需求的满足倒是可以,但是不够优雅直观,可读性不高!下面让我们一睹枚举的高级用法之多键值的映射风采。枚举Enum多键值映射使用譬如这个四合一智能门锁场景,可能其他微服...

weixin_39581716的博客 234
上一篇: K:找寻最长子序列的四个算法
下一篇: K:Eclipse Memory Analyzer的安装和使用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值