我发现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 。
我的问题如下:
答案 0 :(得分:3)
它不仅限于64.如果有超过64个项目,则选择一个不同的实现。我没有查看源代码,但我猜想RegularEnumSet
使用单个long
实现为位掩码。
答案 1 :(得分:1)