這個類是1.5開始有的,目前個人使用量幾乎為零,因為我很少使用枚舉,呵呵。我這 裡也是簡單介紹一下而已。其使用方式和普通的Set沒有區別,只是構造方法有一些特殊 的而已。
1.package collection.lession5;
2.
3.import java.util.Arrays;
4.import java.util.EnumSet;
5.import java.util.Set;
6.
7./**
8. * 老紫竹JAVA提高教程(5)-認識Set集合之EnumSet。<br>
9. * 枚舉 set 中所有鍵都必須來自單個枚舉類型<br>
10. * 該枚舉類型在創建 set 時顯式或隱式地指定<br>
11. * 迭代順序是聲明時的順序。<br>
12. * 不允許null數據。
13. *
14. * @author 老紫竹 JAVA世紀網(java2000.net)
15. *
16. */
17.public class Lession5 {
18.
19. /**
20. * @param args
21. */
22. public static void main(String[] args) {
23. // 創建一個指定類型的空的集合
24. EnumSet<MyEnum> set = EnumSet.noneOf(MyEnum.class);
25. set.add(MyEnum.RED);
26. set.add(MyEnum.GREEN);
27. set.add(MyEnum.BLUR);
28. showSet(set);
29.
30. // 創建指定類型的所有數據的集合
31. EnumSet<MyEnum> set2 = EnumSet.allOf(MyEnum.class);
32. showSet(set2);
33.
34. // 創建指定類型指定初始數據的集合
35. EnumSet<MyEnum> set3 = EnumSet.of(MyEnum.GREEN, MyEnum.RED, MyEnum.WHITE);
36. showSet(set3);
37.
38. // 創建指定類型,指定范圍的集合
39. // 包含邊界數據
40. EnumSet<MyEnum> set4 = EnumSet.range(MyEnum.RED, MyEnum.YELLOW);
41. showSet(set4);
42.
43. // 集合的用法和普通的沒有區別
44. }
45.
46. /**
47. * 顯示Set裡面的數據。
48. *
49. * @param set
50. */
51. private static void showSet(Set set) {
52. System.out.println(Arrays.toString(set.toArray()));
53. }
54.}
55.
56.enum MyEnum {
57. BLACK, WHITE, RED, BLUR, GREEN, YELLOW
58.}
測試:
1 自己書寫 copyOf(Collection<E> c) 和 complementOf(EnumSet<E> s) 的使用方式
2 測試在EnumSet.of 是否允許有重復值,是編譯報錯還是運行報錯
3 測試 EnumSet.range 是否起點大於終點,也就是反向的range,看編譯錯誤還是運 行錯誤
總結
如果我們要用到對枚舉類型的集合處理,這個當然是很好的選擇。可惜我自己目前還 用不到,以後在項目裡,根據情況再確定吧。
如果range起點大於重點,出現如下的異常信息:
Exception in thread "main" java.lang.IllegalArgumentException: RED > BLACK