枚举集中的枚举限制数如何来自

  • 本文关键字:枚举 集中 java enums enumset
  • 更新时间 :
  • 英文 :


我发现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。否则,将改用巨型枚举集

在这里,我的问题如下:

  1. 这个限制枚举数 (64) 是如何来的,或者如何计算为 64?
  2. 为什么同时使用RegularEnumSet和JumboEnumSet,这样做有什么好处?

它不限于 64。 如果项目超过 64 个,则选择不同的实现。 我没有看过源代码,但我猜RegularEnumSet是使用单个long实现为位掩码的。

它不是,它仅限于枚举中可用的不同类型:

枚举

集中的所有元素都必须来自单个枚举类型 这是在创建集合时显式或隐式指定的。

相关内容

  • 没有找到相关文章

最新更新