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/
相关推荐
EnumSet抽象类的实现机制主要包括以下几个方面: 首先,EnumSet抽象类继承自AbstractSet抽象类,并实现了Cloneable和Serializable接口。这意味着EnumSet抽象类支持克隆和序列化操作。 其次,EnumSet抽象类包含两个...
存储枚举元素:EnumSet 只能存储同一个枚举类型的元素,不能存储不同枚举类型的元素。它基于位向量实现,针对每个枚举常量维护一个标记位来表示元素的存在或缺失。 不允许空值:EnumSet 不允许插入空值(null),...
答案肯定是EnumSet有一定的特性,举个例子,EnumSet的速度很快。其他特性不一一列举了,毕竟本文的内容不是介绍EnumSet的特性。 首先以事实说话,存在这样一个EnumSet,它有50个枚举值T0~T49,将50个值插入到...
然而,《Effective Java》第二版中提到,Java提供了一个更好的替代方案:`EnumSet`。本文将深入探讨`EnumSet`如何代替位域,并通过代码示例展示其优势。 位域使用`int`或`byte`等整型常量来存储一系列标志,例如: ...
在这个例子中,`MyEnum`是枚举类型,`VALUE1`是`MyEnum`的一个枚举常量,`"Value1"`是与之关联的值。 此外,枚举还支持常量的自然排序,可以实现`Comparable`接口自定义比较规则,也可以通过`enum`类实现`...
以下是一个使用EnumMap的例子: ```java public enum Types {RED, GREEN, BLACK, YELLO} @Test public void useEnumMap(){ EnumMap, String> activityMap = new EnumMap(Types.class); activityMap.put(Types....
目录介绍特征安装用法设置一个MappedValueRepresentable枚举使用MappedValueCollectionRepresented 使用MappedEnum类型的可编码枚举在ESet中使用OptionSet中的EnumSet 将EnumSet转换为Enum数组使用...
enumset一个用于定义可在紧凑位集中使用的枚举的库。 它支持最多128个变量的枚举,并具有在枚举中使用这些集合的宏。用于定义可在紧凑位集中使用的枚举的库。 它支持最多128个变量的枚举,并具有一个宏以在常量中...
本文将深入探讨Java中四个主要的Set实现类:HashSet、LinkedHashSet、TreeSet以及EnumSet。 首先,Set集合的核心特性是不存储重复元素。在尝试通过`add()`方法添加相同元素时,如果集合中已经存在该元素,`add()`...
在这个例子中,`Color`是一个枚举类型,`RED`, `GREEN`, `BLUE`是该枚举类型的三个实例,它们都是`Color`类型的对象。 枚举的特性包括: 1. **预定义的方法**:每个枚举类型都自动继承了`java.lang.Enum`类,因此...
Java编写器JavaWriter是一个实用程序类,它有助于生成 Java 源文件。 在执行诸如注释处理或与元数据文件(例如,数据库模式、协议格式)交互等操作时,源文件生成非常有用。 通过生成代码,您无需编写样板,同时还为...
JavaWriter是一个实用程序类,它有助于生成 Java 源文件。 在执行诸如注释处理或与元数据文件(例如,数据库模式、协议格式)交互等操作时,源文件生成非常有用。 通过生成代码,您无需编写样板,同时还为元数据...
在这个例子中,我们创建了一个`WebServerFactoryCustomizer`的Bean,当Spring Boot初始化Web服务器时,会调用`customize()`方法进行自定义配置。这里我们设置了服务器监听的端口、最大HTTP头大小,并添加了一个...
下面的例子中,我们为每个枚举常量赋予了对应的天数: ```java public enum WeekDay { MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5), SATURDAY(6), SUNDAY(7); private int dayNumber; ...
1. 创建一个空的`EnumSet`实例:`EnumSet<Weeks> week = EnumSet.noneOf(Weeks.class);` 这行代码创建了一个包含`Weeks`枚举所有元素的`EnumSet`,但当前为空。 2. 添加元素到`EnumSet`:`week.add(MONDAY);` `...
与Collection一样,Map接口也有几个重要的实现类,比如HashMap和TreeMap。 Java集合框架中的几个关键组件包括: 1. **Set接口**:Set集合是一种不允许包含重复元素的集合。实现Set接口的类有HashSet、TreeSet等。...
Set是Java集合类的重要...使用EnumSet类的add()方法添加元素,使用EnumSet类的remove()方法删除元素,使用EnumSet类的complementOf()方法获取对象的全部,使用EnumSet类的range()方法获取指定范围的元素。 代码如下
用枚举值管理项目字典的实战应用(适配器模式)(代码示例) 枚举值相比常量的优势 应用场景 模拟代码实现 ...常量需要用到反射,而枚举的EnumSet提供了直接遍历的方法。 1.4 离散值面向对象,方便程序调用。