EnumSet 是 Java 5 引入的專用集合實現,專門用於處理枚舉類型。雖然在實際開發中使用頻率不高,但掌握其特性對於處理枚舉相關場景非常有幫助。本文將通過代碼示例詳細介紹 EnumSet 的核心用法與特點。
package collection.lession5;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.Set;
public class Lession5 {
public static void main(String[] args) {
// 1. 創建指定類型的空集合
EnumSet<MyEnum> set = EnumSet.noneOf(MyEnum.class);
set.add(MyEnum.RED);
set.add(MyEnum.GREEN);
set.add(MyEnum.BLUR);
showSet(set);
// 2. 創建包含所有枚舉值的集合
EnumSet<MyEnum> set2 = EnumSet.allOf(MyEnum.class);
showSet(set2);
// 3. 創建指定初始元素的集合
EnumSet<MyEnum> set3 = EnumSet.of(MyEnum.GREEN, MyEnum.RED, MyEnum.WHITE);
showSet(set3);
// 4. 創建指定範圍的集合(包含邊界)
EnumSet<MyEnum> set4 = EnumSet.range(MyEnum.RED, MyEnum.YELLOW);
showSet(set4);
}
private static void showSet(Set set) {
System.out.println(Arrays.toString(set.toArray()));
}
}
enum MyEnum {
BLACK, WHITE, RED, BLUR, GREEN, YELLOW
}
copyOf(Collection<E> c) 和 complementOf(EnumSet<E> s) 方法EnumSet.of 是否允許重複值,觀察編譯或運行時行為EnumSet.range 起點大於終點的情況(會拋出 IllegalArgumentException)當 range 起點大於終點時:
Exception in thread "main" java.lang.IllegalArgumentException: RED > BLACK
EnumSet 是處理枚舉類型集合的最佳選擇,具有類型安全、高性能、代碼簡潔等優勢。雖然日常開發中較少直接使用枚舉,但在狀態機、權限控制、配置選項等場景中非常實用。
