RegularEnumSet的源码
  从Add方法的源码可以看出add方法实际只是对长整型数据element做了一个操作,也是说EnumSet实际上将枚举值保存在一个长整型数据上。没个枚举值占用一bit。每次添加做的主要操作是1、类型检查 2、 添加枚举值 3、判断枚举值是否已经添加过了。
  现在模拟一个场景来说明EnumSet工作原理。新建一个EnumSet(Set1),并向Set1中添加EnumTest.T3(ordinal:3),代码如下
  EnumSet<EnumTest> set1 = EnumSet.noneOf(EnumTest.class);
  set1.add(EnumTest.T3);

  element本来有64个bit,这里简略画了。这里有一个问题,是枚举值的个数超过64个怎么办?超过64个了用EnumSet的另一个实现JumboEnumSet。
  本文到此结束了,至于JumboEnumSet的工作原理和RegularEnumSet其他方法的工作原理请自行探索吧。所有源码都可以在http://grepcode.com/ 找到。