Java EnumSet

У цьому посібнику ми дізнаємося про клас 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 вже знає всі можливі значення набору.

Це є причиною того, чому набори перечислення реалізуються внутрішньо як послідовність бітів. Біти вказують, присутні елементи в наборі перечислення чи ні.

Біт відповідного елемента вмикається, якщо цей елемент присутній у наборі.

Цікаві статті...