Gymterview
middle

Для Enum есть специальный класс java.util.EnumSet — зачем он нужен

EnumSet — это высокоэффективная реализация Set, специализированная для хранения элементов одного типа Enum. Внутри она использует битовый вектор (bit vector), где каждый элемент перечисления представлен одним битом.

Преимущества перед HashSet/TreeSet:

  • Все операции (add, remove, contains) за O(1) — битовые операции.
  • Пакетные операции (containsAll, retainAll, addAll) работают за O(1) через побитовые AND/OR.
  • Минимальное потребление памяти: для enum с <= 64 элементами используется один long (RegularEnumSet), для большего количества — массив long (JumboEnumSet).
  • Порядок итерации совпадает с порядком объявления элементов в enum.

EnumSet не имеет публичного конструктора — экземпляры создаются через статические фабричные методы: EnumSet.of(), EnumSet.allOf(), EnumSet.noneOf(), EnumSet.range(), EnumSet.complementOf().

Пример
EnumSet<DayOfWeek> weekdays = EnumSet.range(DayOfWeek.MONDAY, DayOfWeek.FRIDAY);
EnumSet<DayOfWeek> weekend = EnumSet.complementOf(weekdays);

На собеседовании: объясните через битовый вектор. Главное преимущество — O(1) для всех операций, включая пакетные. Упомяните RegularEnumSet (один long) и фабричные методы.