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}

