Java EnumSet を探索しているときに、2 つのパッケージ プライベートクラスに出くわしました。
- RegularEnumSet
- ジャンボ列挙セット
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 の背後にあるロジックは何ですか?