В этом руководстве мы узнаем о классе 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()
- удаляет указанный элемент из набора enumremoveAll()
- удаляет все элементы из набора 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 указывает, присутствуют ли элементы в наборе перечисления или нет.
Бит соответствующего элемента включается, если этот элемент присутствует в наборе.