Java 中的 EnumSet
java programming java 8object oriented programming
java.util.EnumSet 类是用于枚举类型的专用 Set 实现。以下是关于 EnumSet 的要点 −
枚举集中的所有元素都必须来自在创建集合时明确或隐式指定的单个枚举类型。
枚举集在内部表示为位向量。
EnumSet 未同步。如果多个线程同时访问枚举集,并且至少有一个线程修改了该集,则应在外部对其进行同步。
类声明
以下是 java.util.EnumSet 类 −
的声明public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E> implements Cloneable, Serializable
类方法
Sr.No. | 方法与说明 |
---|---|
1 | static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)此方法创建一个枚举集,其中包含指定元素类型中的所有元素。 |
2 | EnumSet<E> clone()此方法返回此集合的副本。 |
3 | static <E extends Enum<E>> EnumSet<E> supplementOf(EnumSet<E> s)此方法创建一个与指定枚举集元素类型相同的枚举集,初始包含指定集合中未包含的所有该类型的元素。 |
4 | static <E extends Enum<E>> EnumSet<E> copyOf(Collection<E> c)此方法创建一个从指定集合初始化的枚举集。 |
5 | static <E extends Enum<E>> EnumSet<E> copyOf(EnumSet<E> s)此方法创建一个具有与指定枚举集相同元素类型的枚举集,初始包含相同的元素(如果有)。 |
6 | static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType)此方法创建一个具有指定元素类型的空枚举集。 |
7 | static <E extends Enum<E>> EnumSet<E> of(E e)此方法创建一个初始包含指定元素的枚举集。 |
8 | static <E extends Enum<E>> EnumSet<E> of(E first, E... rest)此方法创建一个初始包含指定元素的枚举集。 |
9 | static <E extends Enum<E>> EnumSet<E> of(E e1, E e2)此方法创建一个初始包含指定元素的枚举集。 |
10 | static <E extends Enum<E>> EnumSet<E> of(E e1, E e2, E e3)此方法创建一个初始包含指定元素的枚举集。 |
11 | static <E extends Enum<E>> EnumSet<E> of(E e1, E e2, E e3, E e4)此方法创建一个初始包含指定元素的枚举集。 |
12 | static <E extends Enum<E>> EnumSet<E> of(E e1, E e2, E e3, E e4, E e5)此方法创建一个初始包含指定元素的枚举集。 |
13 | static <E extends Enum<E>> EnumSet<E> range(E from, E to)此方法创建一个枚举集,最初包含由两个指定端点定义的范围内的所有元素。 |
继承的方法
此类从以下类继承方法 −
- java.util.AbstractSet
- java.util.AbstractCollection
- java.util.Object
- java.util.Set
示例
让我们看一个例子。
import java.util.EnumSet; public class Tester{ // 创建枚举 public enum Numbers { ONE, TWO, THREE, FOUR, FIVE }; public static void main(String[] args) { EnumSet<Numbers> set1 = EnumSet.range(Numbers.TWO, Numbers.FIVE); EnumSet<Numbers> set2 = EnumSet.of(Numbers.ONE, Numbers.TWO); EnumSet<Numbers> set3 = EnumSet.complementOf(set2); EnumSet<Numbers> set4 = EnumSet.allOf(Numbers.class); EnumSet<Numbers> set5 = EnumSet.copyOf(set1); EnumSet<Numbers> set6 = EnumSet.noneOf(Numbers.class); System.out.println("Set 1:" + set1); System.out.println("Set 2:" + set2); System.out.println("Set 3:" + set3); System.out.println("Set 4:" + set4); System.out.println("Set 5:" + set5); System.out.println("Set 6:" + set6); } }
这将产生以下结果 −
输出
Set 1:[TWO, THREE, FOUR, FIVE] Set 2:[ONE, TWO] Set 3:[THREE, FOUR, FIVE] Set 4:[ONE, TWO, THREE, FOUR, FIVE] Set 5:[TWO, THREE, FOUR, FIVE] Set 6:[]