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.
EnumSet
Tří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.EnumSet
nejprve 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
EnumSet
Tří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ýčtuaddAll()
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 ArrayList
jsou 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.Iterator
balíč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í,true
pokud je v sadě výčtu další prveknext()
vrátí další prvek v sadě výčtu
Odebrat prvky EnumSet
remove()
- odebere zadaný prvek ze sady výčturemoveAll()
- 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?
EnumSet
Poskytuje 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ě.