1

Java EnumSet を探索しているときに、2 つのパッケージ プライベートクラスに出くわしました。

  1. RegularEnumSet
  2. ジャンボ列挙セット

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 の背後にあるロジックは何ですか?

4

1 に答える 1