enumsetenumset 是一个专为枚举设计的集合类,enumset中的所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建enumset时显式或隐式地指定。
enumset的集合元素也是有序的,enumset以枚举值在enum类内的定义顺序来决定集合元素的顺序。
enumset在内部以位向量的形式存储,这种存储形式非常紧凑、高效,因此enumset对象占用内存很小,而且运行效率很好。尤其是进行批量操作(如调用containsall()和retainall()方法)时,如果其参数也是enumset集合,则该批量操作的执行速度也非常快。
enumset类没有暴露任何构造器来创建该类的实例,程序应该通过它提供的类方法来创建enumset对象。
enumset集合不允许加入null元素,如果试图插入null元素,enumset将抛出nullpointerexception异常。
如果只是想判断enumset是否包含null元素或试图删除null元素都不会抛出异常,只是删除操作将返回false,因为没有任何null元素被删除。
方法介绍:
enumset allof(class elementtype): 创建一个包含指定枚举类里所有枚举值的enumset集合。
enumset complementof(enumset e): 创建一个其元素类型与指定enumset里元素类型相同的enumset集合,新enumset集合包含原enumset集合所不包含的、此类枚举类剩下的枚举值(即新enumset集合和原enumset集合的集合元素加起来是该枚举类的所有枚举值)。
enumset copyof(collection c): 使用一个普通集合来创建enumset集合。
enumset copyof(enumset e): 创建一个指定enumset具有相同元素类型、相同集合元素的enumset集合。
enumset noneof(class elementtype): 创建一个元素类型为指定枚举类型的空enumset。
enumset of(e first,e…rest): 创建一个包含一个或多个枚举值的enumset集合,传入的多个枚举值必须属于同一个枚举类。
enumset range(e from,e to): 创建一个包含从from枚举值到to枚举值范围内所有枚举值的enumset集合。
示例代码:
package com.collection;import java.util.enumset;public class enumsettest { public static void main(string[] args) { //1.创建一个包含session(枚举类)里所有枚举值的enumset集合 enumset e1 = enumset.allof(session.class); system.out.println(e1);//[spring, summer, fail, winter] //2.创建一个空enumset enumset e2 = enumset.noneof(session.class); system.out.println(e2);//[] //3. add()空enumset集合中添加枚举元素 e2.add(session.spring); e2.add(session.summer); system.out.println(e2);//[spring, summer] //4. 以指定枚举值创建enumset集合 enumset e3 = enumset.of(session.spring,session.fail); system.out.println(e3);//[spring, fail] //5.创建一个包含从from枚举值到to枚举值范围内所有枚举值的enumset集合。 enumset e4 = enumset.range(session.spring,session.fail); system.out.println(e4);//[spring, summer, fail] //6.创建一个其元素类型与指定enumset里元素类型相同的enumset集合, // 新enumset集合包含原enumset集合所不包含的枚举值 enumset e5 = enumset.complementof(e4); system.out.println(e5);//[winter] }}//创建一个枚举enum session{ spring, summer, fail, winter}
注意:
除此之外还可以复制另一个enumset集合中的所有元素来创建新的enumset集合,或者复制另一个collection集合中的所有元素来创建新的enumset集合。
示例:
collection c = new hashset(); c.clear(); c.add(session.spring); c.add(session.fail); enumset e6 = enumset.copyof(c); system.out.println(e6);//[spring, fail]
注意:当复制collection集合中所有元素来创建新的enumset集合时,要求collection集合中的所有元素必须是同一个枚举类的枚举值。
错误示例:
c.add("java"); e6 = enumset.copyof(c);//java.lang.classcastexception: java.lang.string cannot be cast to java.lang.enum
things won are done; joy’s soul lies in the doing.
得到即是完结,快乐的精髓在于过程。
以上就是浅谈java集合之enumset的详细内容。