[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-collections-dlya-enum-est-spetsialnyy-klass-java-util-enumset-zachem-on-nuzhen":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":17,"progress":18,"seo":19},497,"dlya-enum-est-spetsialnyy-klass-java-util-enumset-zachem-on-nuzhen",12,"collections","Collections","📚","Для Enum есть специальный класс java.util.EnumSet — зачем он нужен","`EnumSet` — это высокоэффективная реализация Set, специализированная для хранения элементов одного типа Enum. Внутри она использует битовый вектор (bit vector), где каждый элемент перечисления представлен одним битом.\n\nПреимущества перед HashSet\u002FTreeSet:\n\n- Все операции (add, remove, contains) за O(1) — битовые операции.\n- Пакетные операции (containsAll, retainAll, addAll) работают за O(1) через побитовые AND\u002FOR.\n- Минимальное потребление памяти: для enum с \u003C= 64 элементами используется один long (RegularEnumSet), для большего количества — массив long (JumboEnumSet).\n- Порядок итерации совпадает с порядком объявления элементов в enum.\n\nEnumSet не имеет публичного конструктора — экземпляры создаются через статические фабричные методы: `EnumSet.of()`, `EnumSet.allOf()`, `EnumSet.noneOf()`, `EnumSet.range()`, `EnumSet.complementOf()`.\n\n```java\nEnumSet\u003CDayOfWeek> weekdays = EnumSet.range(DayOfWeek.MONDAY, DayOfWeek.FRIDAY);\nEnumSet\u003CDayOfWeek> weekend = EnumSet.complementOf(weekdays);\n```\n\n> **На собеседовании:** объясните через битовый вектор. Главное преимущество — O(1) для всех операций, включая пакетные. Упомяните RegularEnumSet (один long) и фабричные методы.","","middle",[15,16],"performance","jcf",[],null,{"title":20,"description":21,"ogTitle":22,"ogDescription":23,"keywords":24,"schemaAnswer":34,"featuredSnippetReady":35},"EnumSet — битовый вектор для Enum — Gymterview","EnumSet: O(1) все операции через битовые операции. RegularEnumSet — один long для \u003C=64 элементов. Пакетные операции за O(1). Фабричные методы: of, allOf, range.","EnumSet — высокоэффективный Set для Enum — Gymterview","Битовый вектор: O(1) все операции. RegularEnumSet = один long. Фабрики: of(), allOf(), range().",[25,26,27,28,29,30,31,32,33],"EnumSet","Enum","bit vector","RegularEnumSet","JumboEnumSet","O(1)","побитовые операции","Java","собеседование","EnumSet — специализированный Set для Enum на основе битового вектора. Все операции O(1) (побитовые AND\u002FOR). RegularEnumSet — один long (\u003C=64 enum). Пакетные containsAll\u002FretainAll — O(1). Фабрики: EnumSet.of(), allOf(), range(), complementOf().",true]