Java枚举集示例
Java EnumSet类实现Set并将其与枚举类型一起使用。EnumSet(顾名思义)只能包含enum值,所有值都属于同一个enum。此外,EnumSet不允许null值,这意味着它在尝试添加null值时抛出了NullPointerException。它不是线程安全的,这意味着如果需要,我们需要在外部同步它。
为什么选择EnumSet
每当我们必须存储enum值时,EnumSet应该始终是最好的Set实现。所有的基本操作都在一个恒定的时间(1)复杂度中执行,这是非常快的。这是因为EnumSet类中的所有方法都是使用算术位操作(<<,>>,&,|等)实现的。总之,EnumSet非常高效,因为它使用较少的内存,而且速度也很快。
枚举集中的方法
EnumSet<E>close():返回当前集的副本。
static<E extends Enum<E>>EnumSet<E>allOf(Class<E>elementType):创建一个包含指定元素类型中所有元素的枚举集。
static<E extends Enum<E>>EnumSet<E>complementOf(EnumSet<E>s):创建与指定枚举集具有相同元素类型的枚举集,最初包含指定集中未包含的此类型的所有元素。
static<E extends Enum<E>>EnumSet<E>copyOf(Collection<E>c):创建从指定集合初始化的集。
static<E extends Enum<E>>EnumSet<E>copyOf(EnumSet<E>s):创建一个与指定集具有相同元素类型的枚举集,包含相同的元素(如果有)。
(E E)的static<E extends Enum<E>>EnumSet<E>:创建包含指定元素的枚举集。
static<E extends Enum<E>>EnumSet<E>范围(E from,E to):创建一个枚举集,其中包含由两个参数指定的范围内的所有元素。
继承类方法java.util.AbstractSet:**
等于),哈希码),removeAll)
继承类方法java.util文件 文摘集:
add)、addAll)、clear)、contains)、containsAll)、isEmpty)、iterator)、remove)、retainal)、size)、toArray)、toString)
继承类方法java.lang语言 对象:
finalize)、getClass)、notifyAll)、wait)、wait)、wait)
从接口继承的方法java.util.Set:
add)、addAll)、clear)、contains)、containsAll)、isEmpty)、iterator)、remove)、retainal)、size)、toArray)、toArray)
有关EnumSet的主要方法的更多信息,请访问原始的Oracle文档。
import java.util.EnumSet; enum Student { NAME, AGE, MAJOR, YEAR }; public class EnumSetExample { public static void main(String[] args) { //initializing set EnumSet<Student> set1, set2, set3; //populating the sets using of(E e) enumSet1 = EnumSet.of(Student.NAME, Student.MAJOR, Student.YEAR); //will get all of the properties that have not been initialized to the //specified set (if any) enumSet2 = EnumSet.complementOf(enumSet1); //will get all of the properties that are present in the enumset enumSet3 = EnumSet.allOf(Student.class); //will get from age to year and everything in between the properties of the //enumset class enumSet4 = EnumSet.range(Student.AGE, Student.YEAR); System.out.println("Set 1: " + enumSet1); System.out.println("Set 2: " + enumSet2); System.out.println("Set 3: " + enumSet3); System.out.println("Set 4: " + enumSet4); } }
输出
Set 1: {NAME, MAJOR, YEAR} Set 2: {AGE} Set 3: {NAME, AGE, MAJOR, YEAR} Set 4: {AGE, MAJOR, YEAR}