У цьому посібнику ми дізнаємося про клас Java EnumSet та різні його методи за допомогою прикладів.
EnumSet
Клас рамок колекцій Java надає набір реалізації елементів одного перерахування.
Перш ніж дізнатись про EnumSet, обов’язково знайте про Java Enums.
Він реалізує інтерфейс Set.
Створення EnumSet
Для того, щоб створити набір перечислень, java.util.EnumSet
спочатку потрібно імпортувати пакет.
На відміну від інших реалізацій набору, набір enum не має відкритих конструкторів. Ми повинні використовувати заздалегідь визначені методи для створення набору перерахувань.
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 позначає перелік розмірів, який ми створили.
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: ()
Тут ми створили порожній перелік із назвою розміри.
Примітка : Ми можемо вставити лише елементи переліку типу Size у вищезазначену програму. Це тому, що ми створили наш порожній набір перечислень, використовуючи перелік розмірів.
3. Використання діапазону (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()
метод, щоб вставити всі елементи набору перерахувань розміри1 до набору переліку переліку2.
Крім того , можна вставити елементи з інших колекцій , таких як 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()
- видаляє вказаний елемент із набору переліченьremoveAll()
- видаляє всі елементи з набору переліку
Наприклад,
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
).
Набір перечислення зберігає лише значення перерахування певного переліку. Отже, JVM вже знає всі можливі значення набору.
Це є причиною того, чому набори перечислення реалізуються внутрішньо як послідовність бітів. Біти вказують, присутні елементи в наборі перечислення чи ні.
Біт відповідного елемента вмикається, якщо цей елемент присутній у наборі.