Java 枚举集
Java 枚举集
在本教程中,我们将通过示例了解 Java EnumSet 类及其各种方法。
EnumSet
Java 集合框架的类提供了单个枚举元素的集合实现。
在了解 EnumSet 之前,请务必了解 Java Enums。
它实现了Set接口。
创建枚举集
为了创建枚举集,我们必须导入 java.util.EnumSet
先打包。
与其他集合实现不同,枚举集合没有公共构造函数。我们必须使用预定义的方法来创建枚举集。
1。使用 allOf(Size)
allof()
方法创建一个枚举集,其中包含指定枚举类型 Size 的所有值 .例如,
import java.util.EnumSet;
class Main {
// an enum named Size
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using allOf()
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
System.out.println("EnumSet: " + sizes);
}
}
输出
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]
注意声明,
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
这里,Size.class 表示 大小 我们创建的枚举。
2。使用 noneOf(Size)
noneOf()
方法创建一个空的枚举集。例如,
import java.util.EnumSet;
class Main {
// an enum type Size
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using noneOf()
EnumSet<Size> sizes = EnumSet.noneOf(Size.class);
System.out.println("Empty EnumSet: " + sizes);
}
}
输出
Empty EnumSet : []
在这里,我们创建了一个名为 sizes 的空枚举 .
注意 :我们只能插入枚举类型 Size 的元素 在上述程序中。这是因为我们使用 Size 创建了我们的空枚举集 枚举。
3。使用 range(e1, e2) 方法
range()
方法创建一个枚举集,其中包含 e1 之间枚举的所有值 和 e2 包括这两个值。例如,
import java.util.EnumSet;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using range()
EnumSet<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE);
System.out.println("EnumSet: " + sizes);
}
}
输出
EnumSet: [MEDIUM, LARGE, EXTRALARGE]
4。使用of()方法
of()
方法创建一个包含指定元素的枚举集。例如,
import java.util.EnumSet;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Using of() with a single parameter
EnumSet<Size> sizes1 = EnumSet.of(Size.MEDIUM);
System.out.println("EnumSet1: " + sizes1);
EnumSet<Size> sizes2 = EnumSet.of(Size.SMALL, Size.LARGE);
System.out.println("EnumSet2: " + sizes2);
}
}
输出
EnumSet1: [MEDIUM] EnumSet2: [SMALL, LARGE]
EnumSet 的方法
EnumSet
类提供了允许我们在枚举集上执行各种元素的方法。
向 EnumSet 插入元素
add()
- 将指定的枚举值插入枚举集addAll()
将指定集合的所有元素插入到集合中
例如,
import java.util.EnumSet;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using allOf()
EnumSet<Size> sizes1 = EnumSet.allOf(Size.class);
// Creating an EnumSet using noneOf()
EnumSet<Size> sizes2 = EnumSet.noneOf(Size.class);
// Using add method
sizes2.add(Size.MEDIUM);
System.out.println("EnumSet Using add(): " + sizes2);
// Using addAll() method
sizes2.addAll(sizes1);
System.out.println("EnumSet Using addAll(): " + sizes2);
}
}
输出
EnumSet using add(): [MEDIUM] EnumSet using addAll(): [SMALL, MEDIUM, LARGE, EXTRALARGE]
在上面的例子中,我们使用了 addAll()
插入枚举集 sizes1 的所有元素的方法 到一个枚举集 sizes2 .
也可以插入其他集合中的元素,例如 ArrayList
, LinkedList
等到使用 addAll()
的枚举集 .但是,所有集合都应该是相同的枚举类型。
访问 EnumSet 元素
要访问枚举集的元素,我们可以使用 iterator()
方法。为了使用这个方法,我们必须导入 java.util.Iterator
包裹。例如,
import java.util.EnumSet;
import java.util.Iterator;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using allOf()
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
Iterator<Size> iterate = sizes.iterator();
System.out.print("EnumSet: ");
while(iterate.hasNext()) {
System.out.print(iterate.next());
System.out.print(", ");
}
}
}
输出
EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,
注意 :
hasNext()
返回true
如果枚举集中有下一个元素next()
返回枚举集中的下一个元素
删除 EnumSet 元素
remove()
- 从枚举集中删除指定元素removeAll()
- 从枚举集中删除所有元素
例如,
import java.util.EnumSet;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating EnumSet using allOf()
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
System.out.println("EnumSet: " + sizes);
// Using remove()
boolean value1 = sizes.remove(Size.MEDIUM);
System.out.println("Is MEDIUM removed? " + value1);
// Using removeAll()
boolean value2 = sizes.removeAll(sizes);
System.out.println("Are all elements removed? " + value2);
}
}
输出
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE] Is MEDIUM removed? true Are all elements removed? true
其他方法
方法 | 说明 |
---|---|
copyOf() | 创建 EnumSet 的副本 |
contains() | 搜索 EnumSet 对于指定元素并返回一个布尔结果 |
isEmpty() | 检查 EnumSet 是空的 |
size() | 返回EnumSet 的大小 |
clear() | 从 EnumSet 中移除所有元素 |
可克隆和可序列化的接口
EnumSet
类还实现了 Cloneable
和 Serializable
接口。
可克隆界面
它允许 EnumSet
类来复制该类的实例。
可序列化接口
每当需要通过网络传输 Java 对象时,都需要将对象转换为位或字节。这是因为 Java 对象无法通过网络传输。
Serializable
接口允许类被序列化。这意味着实现 Serializable
的类的对象 可以转换为位或字节。
为什么选择 EnumSet?
EnumSet
提供了一种比其他集合实现(如 HashSet
, TreeSet
)。
枚举集仅存储特定枚举的枚举值。因此,JVM 已经知道该集合的所有可能值。
这就是枚举集在内部实现为位序列的原因。位指定元素是否存在于枚举集中。
如果该元素存在于集合中,则相应元素的位被打开。
java