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

这个类是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

时间: 2024-07-30 15:19:43

JAVA提高教程(5)-认识Set集合之EnumSet的相关文章

JAVA提高教程(4)-认识Set集合之TreeSet

TreeSet 是用来进行集合排序的,请注意他和LinkedHashSet的区别. TreeSet是按照一定的规则,将加入到集合里面的数据进行排序,而LinkedHashSet是 严格按照你放入集合的顺序进行使用. 先看源代码 package collection.lession4; import java.util.Arrays; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; /** *

JAVA提高教程(3)-认识Set集合之LinkedHashSet

有序的集合,就是LinkedList,内部通过双向链表实现,LinkedHashMap为基础. package collection.lession3; import java.util.Arrays; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; /** * 老紫竹JAVA提高教程(3)-认识Set集合之LinkedHashSet.<br> * <br> * Link

JAVA提高教程(2)-认识Set集合之HashSet

集合在Java里面的作用非凡,我们常用的有Set,List和Map三种,我们先熟悉一下Set ,特别是HashSet的使用 package collection.lession2; import java.util.HashSet; import java.util.Set; /** * 老紫竹JAVA提高教程(2)-认识Set集合之HashSet.<br> * Set用来保存不允许重复的数据.可以是任何对象类型.<br> * JDK5以后,主类型可以通过autobox 放入Set

JAVA提高教程(1)-认识Set集合

集合的基本介绍,全在代码里了.不同的实现,细节不同,使用时稍微注意点就行了 .幸好我们常用的就那么几个. package collection.lession1; import java.util.EnumSet; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Set; import java.util.TreeSet; /** * 老紫竹

JAVA提高教程(11)-认识Map

Map可以为某些数据提供快速查找功能,通过关键字(key)可以快速的得到对应的 Value,而不用像List那样需要大范围的遍历或特别的算法. 1. 源代码 1.import java.util.ArrayList; 2.import java.util.HashMap; 3.import java.util.HashSet; 4.import java.util.Iterator; 5.import java.util.List; 6.import java.util.Map; 7.impor

JAVA提高教程(8)-认识List列表之Vector

Vector和ArrayList的最大区别就是Vector的主要集合方法是线程同步的. 1.package collection.lession8; 2. 3.import java.util.Arrays; 4.import java.util.Collection; 5.import java.util.Enumeration; 6.import java.util.Iterator; 7.import java.util.List; 8.import java.util.Vector; 9

JAVA提高教程(6)-认识List列表

列表是很常用的数据结构,感觉比Map和Set用的频率要高一些吧,因为我经常用其返 回数据库的操作结果集 package collection.lession6; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.Stack; import

JAVA提高教程(14)-认识Map之LinkedHashMap

Java基础及提高教程目录 Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序.此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表.此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序).注意,如果在映射中重新插入 键,则插入顺序不受影响.(如果在调用 m.put(k, v) 前 m.containsKey(k) 返回了 true,则调用时会将键 k 重新插入到映射 m 中.) 此实现可以让客户避免未指定的.由 HashMap(及

JAVA提高教程(13)-认识Map之Hashtable

这个类,在使用上和HashMap的区别不大,其方法都是同步的(Synchronized). 1.package collection.lession13; 2. 3.import java.util.Hashtable; 4. 5./** 6. * 老紫竹JAVA提高教程(13)-认识Map之Hashtable<br> 7. * 这个类继承自一个已经过期不推荐使用的Dictionary类<br> 8. * 目前均推荐实现Map接口<br> 9. * 10. * 11.