Добавить в корзинуПозвонить
Найти в Дзене
Java

В Java для enum лучше часто брать не HashSet, а EnumSet

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

В Java для enum лучше часто брать не HashSet, а EnumSet.

EnumSet - это специальная реализация Set, заточенная именно под enum-значения.

Фишка в том, что внутри он хранит элементы не как обычные объекты в hash-таблице, а как битовую маску.

Каждое значение enum получает свой бит:

enum Permission {

READ,

WRITE,

DELETE

}

Если в наборе есть READ и WRITE, внутри это может быть просто несколько включённых битов.

Из-за этого операции вроде contains, add, remove, union, intersection работают очень быстро и занимают меньше памяти.

Пример:

EnumSet<Permission> admin = EnumSet.of(

Permission.READ,

Permission.WRITE,

Permission.DELETE

);

boolean canWrite = admin.contains(Permission.WRITE);

Для прав доступа, статусов, флагов, режимов и feature toggles это почти идеальный вариант.

HashSet<Enum> тоже будет работать, но чаще это лишняя тяжесть.

Если набор состоит только из enum-значений - сначала подумайте про EnumSet.