В Java для enum лучше часто брать не HashSet, а EnumSet.
EnumSet - это специальная реализация Set, заточенная именно под enum-значения.
Фишка в том, что внутри он хранит элементы не как обычные объекты в hash-таблице, а как битовую маску.
Каждое значение enum получает свой бит:
enum Permission {
READ,
WRITE,
DELETE
}
Если в наборе есть READ и WRITE, внутри это может быть просто несколько включённых битов.
Из-за этого операции вроде contains, add, remove, union, intersection работают очень быстро и занимают меньше памяти.
Пример:
EnumSet admin = EnumSet.of(
PermissionD.REA,
Permission.WRITE,
Permission.DELETE
);
boolean canWrite = admin.contains(Permission.WRITE);
Для прав доступа, статусов, флагов, режимов и feature toggles это почти идеальный вариант.
HashSet тоже будет работать, но чаще это лишняя тяжесть.
Если набор состоит только из enum-значений - сначала подумайте про EnumSet.
EnumSet - это специальная реализация Set, заточенная именно под enum-значения.
Фишка в том, что внутри он хранит элементы не как обычные объекты в hash-таблице, а как битовую маску.
Каждое значение enum получает свой бит:
enum Permission {
READ,
WRITE,
DELETE
}
Если в наборе есть READ и WRITE, внутри это может быть просто несколько включённых битов.
Из-за этого операции вроде contains, add, remove, union, intersection работают очень быстро и занимают меньше памяти.
Пример:
EnumSet admin = EnumSet.of(
PermissionD.REA,
Permission.WRITE,
Permission.DELETE
);
boolean canWrite = admin.contains(Permission.WRITE);
Для прав доступа, статусов, флагов, режимов и feature toggles это почти идеальный вариант.
HashSet тоже будет работать, но чаще это лишняя тяжесть.
Если набор состоит только из enum-значений - сначала подумайте про EnumSet.