在探索 Java EnumSet 时,我遇到了两个包私有类,
- 正则枚举集
- 巨型枚举集
从 EnumSet 来源:
if (universe.length <= 64)
return new RegularEnumSet<>(elementType, universe);
else
return new JumboEnumSet<>(elementType, universe);
此外, RegularEnumSet构造函数看起来像:
RegularEnumSet(Class<E>elementType, Enum[] universe) {
super(elementType, universe);
}
而在JumboEnumSet构造函数的情况下是:
JumboEnumSet(Class<E>elementType, Enum[] universe) {
super(elementType, universe);
elements = new long[(universe.length + 63) >>> 6];
}
所以我的疑问是:
为什么它根据大小使用不同的 EnumSet。它如何影响性能?
JumboEnumSet 使用元素数组背后的逻辑是什么?