Java枚举集示例

时间:2020-02-23 14:37:07  来源:igfitidea点击:

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}