javase5中引入了EnumSet集合。他用bit的操作代替了传统的通过索引int的操作。从而使其速度根据快速。因为EnumSet使用bit操作,所以说他也更能说明一个二进制是否存。同时EnumSet中的集合必须来自Enum。

    1. enum Enumt {
    2. AAA,
    3. BBB,
    4. CCC,
    5. DDD;
    6. }
    7. public class EnumSets {
    8. public static void main(String[] args) {
    9. EnumSet<Enumt> set = EnumSet.noneOf(Enumt.class);
    10. set.add(Enumt.AAA);
    11. System.out.println("set.add()->"+set);
    12. set.addAll(EnumSet.of(Enumt.BBB,Enumt.CCC));
    13. System.out.println("set.addAll()->"+set);
    14. set=EnumSet.allOf(Enumt.class);
    15. System.out.println("set.Enumset.allOf->"+set);
    16. set.removeAll(EnumSet.of(Enumt.AAA,Enumt.BBB));
    17. System.out.println("set.removeAll->"+set);
    18. //创建一个枚举集,最初包含由两个指定端点定义的范围内的所有元素。返回的集合将包含端点本身
    19. EnumSet<Enumt> set1 = EnumSet.range(Enumt.AAA, Enumt.DDD);
    20. System.out.println("Enumset.range->"+set1);
    21. boolean b = set.contains(Enumt.AAA);//判断知道元素是否在集合中
    22. System.out.println(b);
    23. System.out.println(set);
    24. //complementOf(set):创建与指定集合相同的enum类型的集合,该集合不包括指定集合中已有的元素
    25. System.out.println(set = EnumSet.complementOf(set));
    26. }
    27. }

    注意:EnumSet的基础是long ,一个long是64位,而每一个enum实例只需要一个bit表示是否存在,如果enum中的元素超过64呢?

    1. enum Enumt_Two{
    2. A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
    3. A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21,
    4. A22, A23, A24, A25, A26, A27, A28, A29, A30, A31, A32,
    5. A33, A34, A35, A36, A37, A38, A39, A40, A41, A42, A43,
    6. A44, A45, A46, A47, A48, A49, A50, A51, A52, A53, A54,
    7. A55, A56, A57, A58, A59, A60, A61, A62, A63, A64, A65,
    8. A66, A67, A68, A69, A70, A71, A72, A73, A74, A75;
    9. }
    10. public class EnumSet_Two {
    11. public static void main(String[] args) {
    12. EnumSet<Enumt_Two> enumt_twos = EnumSet.allOf(Enumt_Two.class);
    13. int i=0;
    14. for (Enumt_Two two : enumt_twos) {
    15. i++;
    16. System.out.print(two+" ");
    17. if (i%12==0){
    18. System.out.println();
    19. }
    20. }
    21. }
    22. }
    23. //Output:
    24. A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11
    25. A12 A13 A14 A15 A16 A17 A18 A19 A20 A21 A22 A23
    26. A24 A25 A26 A27 A28 A29 A30 A31 A32 A33 A34 A35
    27. A36 A37 A38 A39 A40 A41 A42 A43 A44 A45 A46 A47
    28. A48 A49 A50 A51 A52 A53 A54 A55 A56 A57 A58 A59
    29. A60 A61 A62 A63 A64 A65 A66 A67 A68 A69 A70 A71
    30. A72 A73 A74 A75

    所以,enumSet会在必要的时候去增加一个long