Java EnumSet 類別:初學者的全方位指南
介紹
你好,有抱負的 Java 程式設計師!今天,我們將深入 Java 中 EnumSet 的精彩世界。如果你是编程新手,不必擔心——我將成為你在這次旅途中友善的導遊,一步一步地解釋一切。在這篇教程結束時,你將成為 EnumSet 的專家!
EnumSet 是專為列舉類型使用的專門 Set 實現。它就像一個祕密俱樂部,只有列舉常量才被允許加入!想象一下你正在籌備一個派對,並且有一個不同類型零食的清單。EnumSet 擅長跟蹤你決定提供的零食。
類別聲明
在我們開始使用 EnumSet 之前,讓我們先看看它的聲明:
public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E> implements Cloneable, Serializable
哇,這看起來很複雜!但別擔心,我們將解釋一下:
-
public abstract class
:這意味著 EnumSet 是其他類別的藍圖,但我們不能直接創建一個 EnumSet。 -
<E extends Enum<E>>
:這個花哨的表示法告訴我們 EnumSet 與列舉類型一起工作。 -
extends AbstractSet<E>
:EnumSet 是 Set 的類型,從 AbstractSet 繼承行為。 -
implements Cloneable, Serializable
:這些是我們的 EnumSet 擁有的特殊能力,如能夠創建自己的複本或將其保存到文件中。
類別方法
現在,讓我們看看 EnumSet 的最重要方法。我將它們放在一個表格中以便於參考:
方法 | 描述 |
---|---|
allOf(Class<E> elementType) |
創建一個包含指定列舉類型所有元素的 EnumSet |
complementOf(EnumSet<E> s) |
創建一個包含指定集合中不存在的所有元素的 EnumSet |
copyOf(Collection<E> c) |
從給定的 Collection 創建一個 EnumSet |
noneOf(Class<E> elementType) |
創建一個指定的列舉類型的空 EnumSet |
of(E e) |
創建一個包含單個指定元素的 EnumSet |
of(E e1, E e2, ...) |
創建一個包含兩個或多個指定元素的 EnumSet |
range(E from, E to) |
創建一個包含列舉常量範圍的 EnumSet |
別擔心這些會讓人覺得難以承受——我們馬上就會看到如何使用它們的例子!
繼承的方法
EnumSet 還從其父類繼承了方法。以下是一些最有用的:
方法 | 從哪繼承 | 描述 |
---|---|---|
add(E e) |
AbstractSet | 將元素添加到集合中 |
remove(Object o) |
AbstractSet | 從集合中刪除元素 |
contains(Object o) |
AbstractSet | 檢查集合是否包含特定元素 |
size() |
AbstractCollection | 返回集合中的元素數量 |
isEmpty() |
AbstractCollection | 檢查集合是否為空 |
clear() |
AbstractCollection | 從集合中刪除所有元素 |
創建 EnumSet 示例
現在,讓我們把這些知識付諸實踐,來一個有趣的例子。假設我們正在規劃一個為期一週的假期,並想要跟蹤我們將旅行的日子。我們將使用列舉表示週內的天數,並使用 EnumSet 來管理我們的旅行日。
首先,讓我們定義我們的列舉:
public enum DayOfWeek {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
現在,讓我們創建一些 EnumSets 並與它們一起玩:
import java.util.EnumSet;
public class VacationPlanner {
public static void main(String[] args) {
// 創建一個包含一週內所有天數的 EnumSet
EnumSet<DayOfWeek> allDays = EnumSet.allOf(DayOfWeek.class);
System.out.println("All days: " + allDays);
// 創建一個只有週末的 EnumSet
EnumSet<DayOfWeek> weekend = EnumSet.of(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY);
System.out.println("Weekend days: " + weekend);
// 創建一個工作日的 EnumSet
EnumSet<DayOfWeek> weekdays = EnumSet.complementOf(weekend);
System.out.println("Weekdays: " + weekdays);
// 規劃一個 3 天的旅行
EnumSet<DayOfWeek> tripDays = EnumSet.of(DayOfWeek.FRIDAY, DayOfWeek.SATURDAY, DayOfWeek.SUNDAY);
System.out.println("Trip days: " + tripDays);
// 檢查我們的旅行是否包括星期一
boolean includesMonday = tripDays.contains(DayOfWeek.MONDAY);
System.out.println("Does our trip include Monday? " + includesMonday);
// 從我們的旅行中增加一天
tripDays.add(DayOfWeek.THURSDAY);
System.out.println("Updated trip days: " + tripDays);
// 從我們的旅行中刪除一天
tripDays.remove(DayOfWeek.THURSDAY);
System.out.println("Final trip days: " + tripDays);
}
}
讓我們分解一下這段代碼中發生了什麼:
- 我們使用
EnumSet.allOf()
創建一個包含一週內所有天數的 EnumSet。 - 我們使用
EnumSet.of()
兩個特定的日子創建一個週末的 EnumSet。 - 我們使用
EnumSet.complementOf()
創建一個工作日的 EnumSet,這會給我們所有不在週末集合中的日子。 - 我們使用
EnumSet.of()
三個特定的日子規劃一個 3 天的旅行。 - 我們使用
contains()
方法檢查我們的旅行是否包括星期一。 - 我們使用
add()
方法將星期四添加到我們的旅行中。 - 最後,我們使用
remove()
方法從我們的旅行中刪除星期四。
當你運行此代碼時,你將在每一步看到 EnumSets 被打印出來,顯示它們是如何隨著我們的修改而變化的。
EnumSet 對於處理列舉類型非常高效。它內部使用位向量,這意味著添加、刪除和檢查包含等操作都非常快速!
記住,練習使完美。嘗試創建自己的列舉並使用 EnumSet。也許你可以規劃一週的菜單,跟蹤你每天要做的餐點。或者創建一個學習計劃的待辦事項清單。可能性是無窮的!
我希望這篇教程能幫助你更好地理解 EnumSet。繼續編程,保持好奇心,Java 编程愉快!
Credits: Image by storyset