`
MouseLearnJava
  • 浏览: 459823 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

EnumSet的几个例子

    博客分类:
  • Java
阅读更多

EnumSet 是一个与枚举类型一起使用的专用 Set 实现。枚举set中所有元素都必须来自单个枚举类型(即必须是同类型,且该类型是Enum的子类)。
 枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。 此表示形式非常紧凑且高效。此类的空间和时间性能应该很好,
足以用作传统上基于 int 的“位标志”的替换形式,具有高品质、类型安全的优势。

Enumset是个虚类,我们只能通过它提供的静态方法来返回Enumset的实现类的实例。
返回EnumSet的两种不同的实现:如果EnumSet大小小于64,
就返回RegularEnumSet实例(当然它继承自EnumSet),这个EnumSet实际上至用了一个long来存储这个EnumSet。
如果 EnumSet大小大于等于64,则返回JumboEnumSet实例,它使用一个long[]来存储。这样做的好处很明显: 大多数情况下返回的RegularEnumSet效率比JumboEnumSet高很多。(摘自:http://blog.csdn.net/hudashi/article/details/6943843)
 
 

本文给出EnumSet使用的几个例子:

为了测试EnumSet,我们首先定义两个后面会用到枚举类 Season Month

enum Season {
    SPRING, SUMMER, AUTUMN, WINTER;
}
 
enum Month {
    JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;
}

使用noneOf方法创建空的EnumSet

// 创建一个空的EnumSet
        Set<Season> emptyEnumSet = EnumSet.noneOf(Season.class);
        System.out.println(emptyEnumSet);// []

使用EnumSet.allOf方法创建一个拥有所有枚举类元素的EnumSet

Set<Season> enumSet = EnumSet.allOf(Season.class);
        System.out.println(enumSet);// [SPRING, SUMMER, AUTUMN, WINTER]

使用EnumSet.of方法返回拥有部分元素的EnumSet

如下面的例子,我们从月份的枚举类得到夏季、冬季拥有的月份组成的EnumSet:

Set<Month> summer = EnumSet.of(Month.APRIL, Month.MAY, Month.JUNE);
        System.out.println(summer);// [APRIL, MAY, JUNE]
 
        Set<Month> winter = EnumSet.of(Month.OCTOBER, Month.NOVEMBER,
                Month.DECEMBER);
 
        System.out.println(winter);// [OCTOBER, NOVEMBER, DECEMBER]

使用addAll方法,添加一个EnumSet中的所有元素到另外一个EnumSet

emptyEnumSet.addAll(enumSet);
        System.out.println(emptyEnumSet);// [SPRING, SUMMER, AUTUMN, WINTER]

使用toArray方法,将EnumSet中的元素存放到数组中去

// 将EnumSet转换成数组类型
        Season[] seasons = new Season[enumSet.size()];
        enumSet.toArray(seasons);
        System.out.println(Arrays.deepToString(seasons));// [SPRING, SUMMER,
                                                            // AUTUMN, WINTER]

原文地址http://thecodesample.com/?p=583

更多的例子请访问 http://thecodesample.com/

0
0
分享到:
评论

相关推荐

    java集合-EnumSet的使用

    存储枚举元素:EnumSet 只能存储同一个枚举类型的元素,不能存储不同枚举类型的元素。它基于位向量实现,针对每个枚举常量维护一个标记位来表示元素的存在或缺失。 不允许空值:EnumSet 不允许插入空值(null),...

    阅读EnumSet抽象类

    主要介绍了阅读EnumSet抽象类源码,具有一定参考价值,需要的朋友可以了解下。

    Java EnumSet工作原理初窥

    答案肯定是EnumSet有一定的特性,举个例子,EnumSet的速度很快。其他特性不一一列举了,毕竟本文的内容不是介绍EnumSet的特性。  首先以事实说话,存在这样一个EnumSet,它有50个枚举值T0~T49,将50个值插入到...

    Java中EnumSet代替位域代码详解

    主要介绍了Java中EnumSet代替位域代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    Options:有时在某些情况下,您想在OptionSet中使用Enum或希望Enum由Raw的Int类型支持,但同时也具有String标签

    目录介绍特征安装用法设置一个MappedValueRepresentable枚举使用MappedValueCollectionRepresented 使用MappedEnum类型的可编码枚举在ESet中使用OptionSet中的EnumSet 将EnumSet转换为Enum数组使用...

    enumset-用于创建紧凑的枚举集的库-Rust开发

    enumset一个用于定义可在紧凑位集中使用的枚举的库。 它支持最多128个变量的枚举,并具有在枚举中使用这些集合的宏。用于定义可在紧凑位集中使用的枚举的库。 它支持最多128个变量的枚举,并具有一个宏以在常量中...

    一文弄懂EnumMap和EnumSet

    一般来说我们会选择使用HashMap来存储key-value格式的数据,考虑这样的特殊情况,一个HashMap的key都来自于一个Enum类,这样的情况则可以考虑使用本文要讲的EnumMap。 EnumMap 先看一下EnumMap的定义和HashMap定义的...

    说说Java中的枚举 转 可以了,够了 包括EnumSet(Map)

    NULL 博文链接:https://mlaaalm.iteye.com/blog/694720

    Java—Set集合详解(HashSet/LinkedHashSet/TreeSet/EnumSet)

      Set集合类似于一个容器,程序把很多对象保存到Set集合中,Set集合对添加顺序不记录,当有重复的对象保存到Set集合时,不会新增后加的重复对象。 Set集合的特点 Set集合无重复元素,add()方法添加相同元素时,...

    android_external_square_javawriter

    Java编写器JavaWriter是一个实用程序类,它有助于生成 Java 源文件。 在执行诸如注释处理或与元数据文件(例如,数据库模式、协议格式)交互等操作时,源文件生成非常有用。 通过生成代码,您无需编写样板,同时还为...

    libjavawriter

    JavaWriter是一个实用程序类,它有助于生成 Java 源文件。 在执行诸如注释处理或与元数据文件(例如,数据库模式、协议格式)交互等操作时,源文件生成非常有用。 通过生成代码,您无需编写样板,同时还为元数据...

    高级编程-java实验报告.docx

    实验目的及要求 1) 掌握Java集合框架的概念以及几种具体实现:ArrayList, LinkedList, HashSet, TreeSet, PriorityQueue; 2) 掌握Java集合框架的映射的概念以及映射的...3)枚举类型的使用,EnumSet和EnumMap的使用;

    Java实现高效的枚举元素集合

    Set是Java集合类的重要...使用EnumSet类的add()方法添加元素,使用EnumSet类的remove()方法删除元素,使用EnumSet类的complementOf()方法获取对象的全部,使用EnumSet类的range()方法获取指定范围的元素。  代码如下

    用枚举值管理项目字典的实战应用(适配器模式)(代码示例)

    用枚举值管理项目字典的实战应用(适配器模式)(代码示例) 枚举值相比常量的优势 应用场景 模拟代码实现 ...常量需要用到反射,而枚举的EnumSet提供了直接遍历的方法。 1.4 离散值面向对象,方便程序调用。

    集合效率不完全皮恩车

    以循环1000000万次为标准! 定义如下数组 public static char[] chars = {'A','B','C'...ConcurrentSkipListSet , CopyOnWriteArraySet , EnumSet…, HashSet JobStateReasons , LinkedHashSet , TreeSet Map接口 …….

    jonykchen#effective-java-3rd-chinese#01. 考虑使用静态工厂方法替代构造方法1

    声明的返回类型的任何子类都是允许的。返回对象的类也可以随每次发布而不同。EnumSet 类(详见第 36 条)没有公共构造方法,只有静态工厂。在 OpenJDK

    yuchuangu85#Develop-Source#01. 考虑使用静态工厂方法替代构造方法1

    声明的返回类型的任何子类都是允许的。返回对象的类也可以随每次发布而不同。EnumSet 类(详见第 36 条)没有公共构造方法,只有静态工厂。在 OpenJDK

    Java开发技术大全 电子版

    11.1.4几个常用术语332 11.2集合类的使用333 11.2.1顺序表(ArrayList)使用示例333 11.2.2链表(LinkedList)使用示例336 11.2.3优先队列(PriorityQueue)使用示例340 11.2.4哈希集合(HashSet)使用示例343 ...

Global site tag (gtag.js) - Google Analytics