我发现EnumSet 中使用了枚举的限制数量( 64 )。请参阅下面 EnumSet 源代码中的一个方法(此代码是从 JDK 1.7 中捕获的)。
/**
* Creates an empty enum set with the specified element type.
*
* @param elementType the class object of the element type for this enum
* set
* @throws NullPointerException if <tt>elementType</tt> is null
*/
public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {
Enum[] universe = getUniverse(elementType);
if (universe == null)
throw new ClassCastException(elementType + " not an enum");
if (universe.length <= 64)
return new RegularEnumSet<>(elementType, universe);
else
return new JumboEnumSet<>(elementType, universe);
}
从上面的代码我们可以看出:如果Enum数组的长度小于64,则使用RegularEnumSet。否则,将使用JumboEnumSet代替。
这里我的问题如下:
- 这个枚举的限制数(64)是怎么来的,或者怎么计算为64?
- 为什么同时使用RegularEnumSet和JumboEnumSet,这样做有什么好处?