Sada Java EnumSet

V tomto výukovém programu se na příkladech seznámíme s třídou Java EnumSet a jejími různými metodami.

EnumSetTřída sbírek rámce Java poskytuje sadu provádění prvků jednoho výčtu.

Než se dozvíte o EnumSet, nezapomeňte vědět o Java Enums.

Implementuje rozhraní Set.

Vytváření EnumSet

Abychom mohli vytvořit výčet, musíme java.util.EnumSetnejprve importovat balíček.

Na rozdíl od jiných implementací sady nemá výčtová sada veřejné konstruktory. K vytvoření výčtu musíme použít předdefinované metody.

1. Použití allOf (velikost)

allof()Metoda vytvoří sadu výčtu, který obsahuje všechny hodnoty zadaného typu enum velikosti. Například,

 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); ) ) 

Výstup

 EnumSet: (MALÉ, STŘEDNÍ, VELKÉ, VNĚJŠÍ) 

Všimněte si prohlášení,

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

Tady Size.class označuje výčet velikosti, který jsme vytvořili.

2. Použití noneOf (velikost)

noneOf()Metoda vytvoří prázdný výčtu sadu. Například,

 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); ) ) 

Výstup

 Empty EnumSet: () 

Zde jsme vytvořili prázdný výčet s názvem velikosti.

Poznámka : Do výše uvedeného programu můžeme vložit pouze prvky typu enum Velikost. Je to proto, že jsme vytvořili naši prázdnou sadu výčtu pomocí Size enum.

3. Použití metody range (e1, e2)

range()Metoda vytváří výčtu sadu obsahující všechny hodnoty o výčtu mezi body E1 a E2, včetně obou hodnot. Například,

 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); ) ) 

Výstup

 EnumSet: (STŘEDNÍ, VELKÉ, VNĚJŠÍ) 

4. Použití metody ()

of()Metoda vytváří výčtu sadu obsahující uvedené prvky. Například,

 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); ) ) 

Výstup

 EnumSet1: (STŘEDNÍ) EnumSet2: (MALÝ, VELKÝ) 

Metody EnumSet

EnumSetTřída poskytuje metody, které nám umožní provádět různé prvky na scéně výčtu.

Vložte prvky do EnumSet

  • add() - vloží zadané hodnoty výčtu do sady výčtu
  • addAll() vloží do sady všechny prvky určené kolekce

Například,

 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); ) ) 

Výstup

 EnumSet pomocí add (): (STŘEDNÍ) EnumSet pomocí addAll (): (SMALL, MEDIUM, LARGE, EXTRALARGE) 

Ve výše uvedeném příkladu jsme použili addAll()metodu k vložení všech prvků výčtu sady velikostí1 do výčtu sady velikostí2.

Je také možné vložit prvky z jiných kolekcí, jako ArrayListjsou LinkedList, atd. Do výčtu pomocí addAll(). Všechny kolekce by však měly být stejného typu výčtu.

Přístup k prvkům EnumSet

Pro přístup k prvkům výčtu můžeme použít iterator()metodu. Aby bylo možné použít tuto metodu, musíme java.util.Iteratorbalíček importovat . Například,

 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(", "); ) ) ) 

Výstup

 EnumSet: MALÉ, STŘEDNÍ, VELKÉ, VNĚJŠÍ, 

Poznámka :

  • hasNext()vrátí, truepokud je v sadě výčtu další prvek
  • next() vrátí další prvek v sadě výčtu

Odebrat prvky EnumSet

  • remove() - odebere zadaný prvek ze sady výčtu
  • removeAll() - odebere všechny prvky ze sady výčtu

Například,

 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); ) ) 

Výstup

EnumSet: (MALÉ, STŘEDNÍ, VELKÉ, VNĚJŠÍ) Je odstraněno STŘEDNÍ? true Jsou všechny prvky odstraněny? skutečný

Jiné metody

Metoda Popis
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?

EnumSetPoskytuje efektivní způsob ukládání hodnot enum než druhá sada implementací (podobně HashSet, TreeSet).

Sada výčtu ukládá pouze hodnoty výčtu konkrétního výčtu. Proto JVM již zná všechny možné hodnoty sady.

To je důvod, proč jsou enum sady interně implementovány jako posloupnost bitů. Bits určuje, zda jsou prvky přítomny v sadě výčtu nebo ne.

Bit příslušného prvku se zapne, pokud je tento prvek v sadě.

Zajímavé články...