Java EnumSet

В этом руководстве мы узнаем о классе Java EnumSet и его различных методах с помощью примеров.

EnumSetКласс рамок коллекций Java предоставляет набор реализации элементов одного перечисления.

Прежде чем вы узнаете о EnumSet, убедитесь, что знаете о Java Enums.

Он реализует интерфейс Set.

Создание EnumSet

Чтобы создать набор перечислений, мы должны java.util.EnumSetсначала импортировать пакет.

В отличие от других реализаций наборов, набор перечислений не имеет общедоступных конструкторов. Мы должны использовать предопределенные методы для создания набора перечислений.

1. Использование allOf (Размер)

allof()Метод создает набор перечисления , который содержит все значения указанного типа перечисления Size. Например,

 import java.util.EnumSet; class Main ( // an enum named Size enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using allOf() EnumSet sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); ) ) 

Вывод

 EnumSet: (МАЛЕНЬКИЙ, СРЕДНИЙ, БОЛЬШОЙ, ДОПОЛНИТЕЛЬНЫЙ) 

Обратите внимание на заявление,

 EnumSet sizes = EnumSet.allOf(Size.class); 

Здесь Size.class обозначает созданное нами перечисление Size.

2. Использование noneOf (Размер)

noneOf()Метод создает пустое множество ENUM. Например,

 import java.util.EnumSet; class Main ( // an enum type Size enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using noneOf() EnumSet sizes = EnumSet.noneOf(Size.class); System.out.println("Empty EnumSet: " + sizes); ) ) 

Вывод

 Пустой EnumSet: () 

Здесь мы создали пустое перечисление с именем sizes.

Примечание . В приведенной выше программе мы можем вставлять только элементы типа перечисления Size. Это потому, что мы создали наш пустой набор перечислений с помощью перечисления размера.

3. Использование метода range (e1, e2)

range()Метод создает набор , содержащий перечисление всех значений перечисления между e1 и e2 , включая оба значения. Например,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using range() EnumSet sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE); System.out.println("EnumSet: " + sizes); ) ) 

Вывод

 EnumSet: (СРЕДНИЙ, БОЛЬШОЙ, ЭКСТРАЛЬНЫЙ) 

4. Использование метода ()

of()Метод создает набор перечислимого содержащий указанные элементы. Например,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Using of() with a single parameter EnumSet sizes1 = EnumSet.of(Size.MEDIUM); System.out.println("EnumSet1: " + sizes1); EnumSet sizes2 = EnumSet.of(Size.SMALL, Size.LARGE); System.out.println("EnumSet2: " + sizes2); ) ) 

Вывод

 EnumSet1: (СРЕДНИЙ) EnumSet2: (МАЛЕНЬКИЙ, БОЛЬШОЙ) 

Методы EnumSet

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

Вставить элементы в EnumSet

  • add() - вставляет указанные значения перечисления в набор перечислений
  • addAll() вставляет все элементы указанной коллекции в набор

Например,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using allOf() EnumSet sizes1 = EnumSet.allOf(Size.class); // Creating an EnumSet using noneOf() EnumSet sizes2 = EnumSet.noneOf(Size.class); // Using add method sizes2.add(Size.MEDIUM); System.out.println("EnumSet Using add(): " + sizes2); // Using addAll() method sizes2.addAll(sizes1); System.out.println("EnumSet Using addAll(): " + sizes2); ) ) 

Вывод

 EnumSet с использованием add (): (MEDIUM) EnumSet с использованием addAll (): (SMALL, MEDIUM, LARGE, EXTRALARGE) 

В приведенном выше примере мы использовали этот addAll()метод для вставки всех элементов перечислимого набора sizes1 в перечисляемый набор sizes2.

Также можно вставлять элементы из других коллекций, таких как ArrayList, LinkedListи т. Д., В набор перечислений, используя addAll(). Однако все коллекции должны быть одного типа перечисления.

Доступ к элементам EnumSet

Чтобы получить доступ к элементам набора перечислений, мы можем использовать iterator()метод. Чтобы использовать этот метод, мы должны импортировать java.util.Iteratorпакет. Например,

 import java.util.EnumSet; import java.util.Iterator; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using allOf() EnumSet sizes = EnumSet.allOf(Size.class); Iterator iterate = sizes.iterator(); System.out.print("EnumSet: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Вывод

 EnumSet: МАЛЫЙ, СРЕДНИЙ, БОЛЬШОЙ, ЭКРАЛЬНЫЙ, 

Примечание :

  • hasNext()возвращается, trueесли в наборе перечисления есть следующий элемент
  • next() возвращает следующий элемент в наборе перечисления

Удалить элементы EnumSet

  • remove() - удаляет указанный элемент из набора enum
  • removeAll() - удаляет все элементы из набора enum

Например,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating EnumSet using allOf() EnumSet sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); // Using remove() boolean value1 = sizes.remove(Size.MEDIUM); System.out.println("Is MEDIUM removed? " + value1); // Using removeAll() boolean value2 = sizes.removeAll(sizes); System.out.println("Are all elements removed? " + value2); ) ) 

Вывод

EnumSet: (МАЛЕНЬКИЙ, СРЕДНИЙ, БОЛЬШОЙ, ДОПОЛНИТЕЛЬНЫЙ) СРЕДНИЙ удален? true Все элементы удалены? правда

Другие методы

Метод Описание
copyOf() Creates a copy of the EnumSet
contains() Searches the EnumSet for the specified element and returns a boolean result
isEmpty() Checks if the EnumSet is empty
size() Returns the size of the EnumSet
clear() Removes all the elements from the EnumSet

Clonable and Serializable Interfaces

The EnumSet class also implements Cloneable and Serializable interfaces.

Cloneable Interface

It allows the EnumSet class to make a copy of instances of the class.

Serializable Interface

Whenever Java objects need to be transmitted over a network, objects need to be converted into bits or bytes. This is because Java objects cannot be transmitted over the network.

The Serializable interface allows classes to be serialized. This means objects of the classes implementing Serializable can be converted into bits or bytes.

Why EnumSet?

EnumSetОбеспечивает эффективный способ для хранения значения перечислений , чем другие реализации множества (как HashSet, TreeSet).

Набор enum хранит только значения перечисления определенного перечисления. Следовательно, JVM уже знает все возможные значения набора.

Это причина того, почему наборы enum внутренне реализованы как последовательность битов. Bits указывает, присутствуют ли элементы в наборе перечисления или нет.

Бит соответствующего элемента включается, если этот элемент присутствует в наборе.

Интересные статьи...