Класс EnumSet
Класс EnumSet - это специализированная коллекция из фреймворка Java Collections, предназначенная для хранения элементов одного типа перечисления (enum). Он наследуется от абстрактного класса AbstractSet и реализует интерфейс Set. В отличие от других реализаций Set, EnumSet не имеет публичных конструкторов. Для создания экземпляров используются статические фабричные методы, такие как of, allOf, noneOf и другие. В параметры методов создания передаются константы перечисления или сам класс перечисления. Внутри EnumSet хранится в виде битового вектора, что делает его чрезвычайно быстрым и компактным по сравнению с HashSet или TreeSet.
Синтаксис
EnumSet<EnumType> set = EnumSet.of(EnumType.CONSTANT1, EnumType.CONSTANT2);
Пример
Давайте создадим перечисление для дней недели и набор, содержащий только рабочие дни:
import java.util.EnumSet;
import java.util.Set;
public class Main
{
enum Day
{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public static void main(String[] args)
{
Set<Day> workDays = EnumSet.of(Day.MONDAY, Day.TUESDAY, Day.WEDNESDAY, Day.THURSDAY, Day.FRIDAY);
System.out.println(workDays);
}
}
Результат выполнения кода:
[MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY]
Пример
Давайте создадим набор всех дней недели с помощью метода allOf и добавим в него выходной день:
import java.util.EnumSet;
import java.util.Set;
public class Main
{
enum Day
{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public static void main(String[] args)
{
Set<Day> allDays = EnumSet.allOf(Day.class);
System.out.println("All days: " + allDays);
Set<Day> weekend = EnumSet.of(Day.SATURDAY, Day.SUNDAY);
allDays.removeAll(weekend);
System.out.println("Work days: " + allDays);
}
}
Результат выполнения кода:
All days: [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY]
Work days: [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY]
Пример
Давайте создадим пустой набор с помощью метода noneOf и проверим его размер:
import java.util.EnumSet;
import java.util.Set;
public class Main
{
enum Day
{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public static void main(String[] args)
{
Set<Day> emptySet = EnumSet.noneOf(Day.class);
System.out.println("Size: " + emptySet.size());
System.out.println("Is empty: " + emptySet.isEmpty());
emptySet.add(Day.MONDAY);
System.out.println("After add: " + emptySet);
}
}
Результат выполнения кода:
Size: 0
Is empty: true
After add: [MONDAY]