Вы также можете использовать EnumSet .Это позволяет использовать именованные биты и может быть более удобным, чем использование BitSet, в котором используются индексированные биты.
Специализированная реализация Set для использования с типами enum.Все элементы в наборе перечислений должны происходить из одного типа перечисления, который указывается, явно или неявно, при создании набора.Наборы перечислений представляются внутри как битовые векторы.Это представление чрезвычайно компактно и эффективно.Пространственно-временные характеристики этого класса должны быть достаточно хорошими, чтобы его можно было использовать в качестве высококачественной, безопасной для типов альтернативы традиционным основанным на int «битовым флагам».Даже массовые операции (такие как containsAll и retainAll) должны выполняться очень быстро, если их аргумент также является набором перечислений.
например
BitSet bs = new BitSet(4);
bs.set(1); // READY
bs.set(3); // LARGE_FLAG
boolean largeFlag = bs.get(1); // LARGE_FLAG
System.out.println("Using BitSet: "+bs);
EnumSet<Settings> settings = EnumSet.noneOf(Settings.class);
settings.add(Settings.READY);
settings.add(Settings.LARGE_FLAG);
boolean largeFlag2 = settings.contains(Settings.LARGE_FLAG);
System.out.println("Using EnumSet: "+settings);
печать
Using BitSet: {1, 3}
Using EnumSet: [READY, LARGE_FLAG]
ИМХО EnumSet намного понятнее, если это уместно.