Java EnumSet 類別:初學者的全方位指南

介紹

你好,有抱負的 Java 程式設計師!今天,我們將深入 Java 中 EnumSet 的精彩世界。如果你是编程新手,不必擔心——我將成為你在這次旅途中友善的導遊,一步一步地解釋一切。在這篇教程結束時,你將成為 EnumSet 的專家!

Java - 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);
}
}

讓我們分解一下這段代碼中發生了什麼:

  1. 我們使用 EnumSet.allOf() 創建一個包含一週內所有天數的 EnumSet。
  2. 我們使用 EnumSet.of() 兩個特定的日子創建一個週末的 EnumSet。
  3. 我們使用 EnumSet.complementOf() 創建一個工作日的 EnumSet,這會給我們所有不在週末集合中的日子。
  4. 我們使用 EnumSet.of() 三個特定的日子規劃一個 3 天的旅行。
  5. 我們使用 contains() 方法檢查我們的旅行是否包括星期一。
  6. 我們使用 add() 方法將星期四添加到我們的旅行中。
  7. 最後,我們使用 remove() 方法從我們的旅行中刪除星期四。

當你運行此代碼時,你將在每一步看到 EnumSets 被打印出來,顯示它們是如何隨著我們的修改而變化的。

EnumSet 對於處理列舉類型非常高效。它內部使用位向量,這意味著添加、刪除和檢查包含等操作都非常快速!

記住,練習使完美。嘗試創建自己的列舉並使用 EnumSet。也許你可以規劃一週的菜單,跟蹤你每天要做的餐點。或者創建一個學習計劃的待辦事項清單。可能性是無窮的!

我希望這篇教程能幫助你更好地理解 EnumSet。繼續編程,保持好奇心,Java 编程愉快!

Credits: Image by storyset