суботу, 2 травня 2020 р.

Клас EnumSet (Java)

EnumSet, Java, Collection, Колекції, Коллекции
Клас EnumSet — це одна з спеціалізованих реалізацій інтерфейсу Set для використання з перелічуваним типом даних (enum). EnumSet розширює AbstractSet та реалізує Cloneable та Serializable інтерфейси Java. EnumSet заміщує більшість методів інтерфейсів Set та Collection. EnumSet доволі швидка реалізація Set, швидша за HashSet, тому що всередині використовуються побітові операції, а не хеш-коди об’єктів.

EnumSet не синхронізований і повинен бути синхронізований ззовні, наприклад з використанням методу Collections.synchronizedSet(java.util.Set).

Всі елементи enum множини мають походити від єдиного перелічуваного типу, що вказується, коли множина створюється явно або неявно. EnumSet не дозволяє додавати значення null. Елементи зберігаються в порядку в якому їх подано в переліченні (enum).

EnumSet використовує безвідмовний (fail-safe) ітератор, що працює з копією EnumSet, тобто ітератор не буде викидати виняток ConcurrentModificationException, в разі зміни даних множини поза ітератором.



EnumSet – це відкритий абстрактний клас, який не має відкритого конструктора, для створення об’єкту EnumSet використовуються відповідні статичні факторні методи. В даних методах для створення EnumSet використовуються дві реалізації даного класу RegularEnumSet(для зберігання невеликих перелічень, до 64) та JumboEnumSet (для зберігання великих перелічень). Наступний приклад демонструє роботу з EnumSet:
import java.util.EnumSet; 
     
enum Colors  
{ 
    RED, GREEN, YELLOW, BLUE, BLACK 
}; 
public class TestEnumSet 
{ 
    public static void main(String[] args)  
    { 
        // Створюємо множину 
        EnumSet<Colors> set1, set2, set3, set4, set5; 
  
        // Додаємо окремі елементи, порядок зберігання буде згідно порядку перелічення
        set1 = EnumSet.of(Colors.RED, Colors.GREEN,  
                          Colors.BLACK, Colors.BLUE); 
        // Заповнити тими елемнтами, яких нема у вказаній множині
        set2 = EnumSet.complementOf(set1);
        // Всі із даного перелічення
        set3 = EnumSet.allOf(Colors.class);
        // Додати усі елементи перелічення в діапазоні від GREEN до BLACK
        set4 = EnumSet.range(Colors.GREEN, Colors.BLACK); 
        // створити пусту множину перелічень відповідного типу
        set5= EnumSet.noneOf(Colors.class);
        System.out.println("Set 1: " + set1); 
        System.out.println("Set 2: " + set2); 
        System.out.println("Set 3: " + set3); 
        System.out.println("Set 4: " + set4); 
        System.out.println("Set 5: " + set5); 
    } 
} 
Результат роботи:
Set 1: [RED, GREEN, BLUE, BLACK]
Set 2: [YELLOW]
Set 3: [RED, GREEN, YELLOW, BLUE, BLACK]
Set 4: [GREEN, YELLOW, BLUE, BLACK]
Set 5: []
P.S. Якщо знайшли помилку, неточності, напишіть про це в коментарях.

Немає коментарів:

Дописати коментар