- 继承图
- 为什么使用
EnumSet
EnumSet
中的方法java.util.Set
继承的方法:">从接口java.util.Set
继承的方法:
Java EnumSet
类实现Set
并将其与枚举类型一起使用。EnumSet
(顾名思义)只能包含枚举值,并且所有值都属于同一个枚举。 此外,EnumSet
不允许使用空值,这意味着它会抛出NullPointerException
尝试添加空值。 它不是线程安全的,这意味着,如果需要,我们需要在外部进行同步。
继承图
枚举集
为什么使用EnumSet
每当我们必须存储枚举值时,EnumSet
应该始终是最佳的Set
实现。 所有基本操作都以固定的time(1)
复杂度执行,这非常快。 这是由于EnumSet
类中的所有方法都是使用算术按位运算(<<
,>>
,&
等)实现的。 总而言之,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)
:创建一个与指定元素类型相同的枚举集,包含相同的元素(如果有)。static <E extends Enum<E>> EnumSet<E> of(E e)
:创建一个包含指定元素的枚举集。atic <E extends Enum<E>> EnumSet<E> range(E from, E to)
:创建一个枚举集,该枚举集包含在由两个参数指定的范围内的所有元素。
从类java.util.AbstractSet
继承的方法:
equals
), hashCode
) , removeAll
)
从类java.util.AbstractCollection
继承的方法:
add
), addAll
) ,clear
),include
), containsAll
) , isEmpty
) ,iterator
),remove
), keepAll
) ,size
), toArray
) , toArray(T[])
) , toString
)
从类java.lang.Object
继承的方法:
finalize
), getClass
) ,notify
), notifyAll
) ,wait
),wait(long)
)。
从接口java.util.Set
继承的方法:
add
), addAll
) ,clear
),contains
), containsAll
) , isEmpty
) ,iterator
),remove
), retainAll
) ,size
), toArray
) , toArray(T[])
)
有关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}