为了更好的使用枚举,Java提供了两个枚举集合:EnumSet和EnumMap,这两个集合的使用方法都比较简单,EnumSet表示其元素必须是某一枚举的枚举项,EnumMap表示Key值必须是某一枚举的枚举项,由于枚举类型的实例数量固定并且有限,相对来说,EnumSet和EnumMap的效率会比其他Set和Map要高.
虽然EnumSret很好用,但是它有一个隐藏的特点.项目中可能定义非常多的枚举项,然后通过EnumSet访问,遍历,但它对不同的枚举数量有不同的处理方式.为了进行对比,我们定义两个枚举,一个数量等于64,一个是65(大于64即可,为什么是64而不是128,512呢?)代码如下:
1 importjava.util.EnumSet;2
3
4 public classClient {5 public static voidmain(String[] args) {6 //创建生成包含所有枚举项的EnumSet
7 EnumSet cs = EnumSet.allOf(Const.class);8 EnumSet lcs = EnumSet.allOf(LargeConst.class);9 //打印出枚举项数量
10 System.out.println("Const枚举项数量:" +cs.size());11 System.out.println("LargeConst枚举项数量:" +lcs.size());12 //输出两个EnumSet的class
13 System.out.println(cs.getClass());14 System.out.println(lcs.getClass());15 }16 }17
18 //普通枚举项,数量小于64
19 enumConst {20 A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V