EnumSet в Java

EnumSet

EnumSet расширяет класс AbstractSet. Используется с перечислениями. Это высоко производительная реализация интерфейса Set для перечислений.

EnumSet может быть использован как заменитель традиционного набора битовых флагов «bit flags».

Множество EnumSet должено содержать элементы только из одного перечисления.

Итератор проходит EnumSet в порядке ввода элементов в набор, что называется естественным порядком. Итератор может проходить по интервалу элементов перечисления (именно перечисления, а не набора) или по всем элементам набора.

Null элементы запрещены, но проверка на наличие таковых элементов или удаление элемента допускаются.

EnumSet не синхронизирован. Базовые операции выполняются за постоянное время.

В общем случае EnumSet работает быстрее, чем HashSet.

Создать множество EnumSet можно так:

здесь все элементы перечисления включены в EnumSet.

Можно создать пустой EnumSet:

es = Collections.synchronizedSet(EnumSet.noneOf(PCounter.class));

А можно создать EnumSet, содержащий только часть элементов перечисления, в примере от Uno до Tres:

es = Collections.synchronizedSet(EnumSet.range(PCounter.UNO, Pcounter.TRES));

Добавить новый элемент в EnumSet:

es.add(PCounter.CUATRO);

новый элемент должен принадлежать перечислению, объявленному при создании EnumSet.

Добавить коллекцию элементов:

boolean resBool = es.addAll(vect);

коллекция должена принадлежать перечислению, объявленному при создании EnumSet.

Получить размер, т.е. количество элементов:

Integer size = es.size();

Проверить есть ли значение «DOS»:

Удалить элемент «DOS»:

boolean get = es.remove(PCounter.DOS);

Удалить все элементы:

es.clear();

Выясняем, не пуст ли объект EnumSet:

Содержит ли EnumSet все злементы коллекции vect?

boolean resBool = es.containsAll(vect);

Удаляем из множества все элементы коллекции vect:

boolean resBool = es.removeAll(vect);

Удаляем из EnumSet все элементы кроме содержащихся в коллекции vect:

boolean resBool = es.retainAll(vect);

Итератор должен быть объявлен внутри synchronized блока:

Итератор по интервалу перечисления, а не множества EnumSet:

Получаем:
EnumSet, Java

такой результат.