老紫竹JAVA提高教程(5)-认识Set集合之EnumSet

 
原文地址:http://www.java2000.net/p11847

这个类是1.5开始有的,目前个人使用量几乎为零,因为我很少使用枚举,呵呵。我这里也是简单介绍一下而已。其使用方式和普通的Set没有区别,只是构造方法有一些特殊的而已。

  1. package collection.lession5;
  2. import java.util.Arrays;
  3. import java.util.EnumSet;
  4. import java.util.Set;
  5. /**
  6.  * 老紫竹JAVA提高教程(5)-认识Set集合之EnumSet。<br>
  7.  * 枚举 set 中所有键都必须来自单个枚举类型<br>
  8.  * 该枚举类型在创建 set 时显式或隐式地指定<br>
  9.  * 迭代顺序是声明时的顺序。<br>
  10.  * 不允许null数据。
  11.  * 
  12.  * @author 老紫竹 JAVA世纪网(java2000.net)
  13.  * 
  14.  */
  15. public class Lession5 {
  16.   /**
  17.    * @param args
  18.    */
  19.   public static void main(String[] args) {
  20.     // 创建一个指定类型的空的集合
  21.     EnumSet<MyEnum> set = EnumSet.noneOf(MyEnum.class);
  22.     set.add(MyEnum.RED);
  23.     set.add(MyEnum.GREEN);
  24.     set.add(MyEnum.BLUR);
  25.     showSet(set);
  26.     // 创建指定类型的所有数据的集合
  27.     EnumSet<MyEnum> set2 = EnumSet.allOf(MyEnum.class);
  28.     showSet(set2);
  29.     // 创建指定类型指定初始数据的集合
  30.     EnumSet<MyEnum> set3 = EnumSet.of(MyEnum.GREEN, MyEnum.RED, MyEnum.WHITE);
  31.     showSet(set3);
  32.     // 创建指定类型,指定范围的集合
  33.     // 包含边界数据
  34.     EnumSet<MyEnum> set4 = EnumSet.range(MyEnum.RED, MyEnum.YELLOW);
  35.     showSet(set4);
  36.     
  37.     // 集合的用法和普通的没有区别
  38.   }
  39.   /**
  40.    * 显示Set里面的数据。
  41.    * 
  42.    * @param set
  43.    */
  44.   private static void showSet(Set set) {
  45.     System.out.println(Arrays.toString(set.toArray()));
  46.   }
  47. }
  48. enum MyEnum {
  49.   BLACK, WHITE, RED, BLUR, GREEN, YELLOW
  50. }
测试:
  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

你可能感兴趣的:(java,thread,C++,c,.net)