Sada Java EnumSet

V tomto tutoriáli sa pomocou príkladov dozvieme o triede Java EnumSet a jej rôznych metódach.

EnumSetTrieda zbierok rámca Java poskytuje sadu vykonávanie prvkov jedného zoznamu.

Predtým, ako sa dozviete o EnumSet, nezabudnite vedieť o Java Enums.

Implementuje rozhranie Set.

Vytvára sa EnumSet

Ak chcete vytvoriť množinu enum, musíme najskôr importovať java.util.EnumSetbalík.

Na rozdiel od iných implementácií množiny nemá sada enum verejné konštruktory. Na vytvorenie množiny výčtov musíme použiť preddefinované metódy.

1. Použitie allOf (veľkosť)

allof()Metóda vytvorí sadu zoznamu, ktorý obsahuje všetky hodnoty zadaného typu enum veľkosti. Naprí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ýkon

 EnumSet: (MALÉ, STREDNÉ, VEĽKÉ, VNÚTORNÉ) 

Všimnite si vyhlásenie,

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

Tu Size.class označuje enum veľkosti, ktoré sme vytvorili.

2. Použitie noneOf (veľkosť)

noneOf()Metóda vytvorí prázdny zoznamu sadu. Naprí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ýkon

 Empty EnumSet: () 

Tu sme vytvorili prázdny výčet s názvom veľkosti.

Poznámka : Do vyššie uvedeného programu môžeme vkladať iba prvky typu enum. Je to preto, lebo sme vytvorili našu prázdnu množinu výčtov pomocou Size enum.

3. Použitie rozsahu (e1, e2) metóda

range()Metóda vytvára zoznamu sadu obsahujúce všetky hodnoty o zoznamu medzi bodmi E1 a E2, vrátane oboch hodnôt. Naprí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ýkon

 EnumSet: (STREDNÉ, VEĽKÉ, EXTRALÁRNE) 

4. Použitie metódy ()

of()Metóda vytvára zoznamu sadu obsahujúci uvedené prvky. Naprí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ýkon

 EnumSet1: (STREDNÉ) EnumSet2: (MALÉ, VEĽKÉ) 

Metódy EnumSet

EnumSetTrieda poskytuje metódy, ktoré nám umožnia vykonávať rôzne prvky na scéne zoznamu.

Vložte prvky do EnumSet

  • add() - vloží zadané hodnoty do výčtu
  • addAll() vloží do sady všetky prvky určenej kolekcie

Naprí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ýkon

 EnumSet pomocou add (): (STREDNÉ) EnumSet pomocou addAll (): (MALÉ, STREDNÉ, VEĽKÉ, VNÚTORNÉ) 

Vo vyššie uvedenom príklade sme použili addAll()metódu na vloženie všetkých prvkov sady výčtu veľkostí1 do súpravy výčtu veľkostí2.

Je tiež možné vložiť prvky z iných zbierok, napríklad ArrayList, LinkedListatď k setu zoznamu pomocou addAll(). Všetky zbierky by však mali byť rovnakého typu.

Prístup k prvkom EnumSet

Na prístup k prvkom množiny výčtov môžeme použiť iterator()metódu. Aby sme mohli použiť túto metódu, musíme java.util.Iteratorbalíček importovať . Naprí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ýkon

 EnumSet: MALÉ, STREDNÉ, VEĽKÉ, EXTRALÁRNE, 

Poznámka :

  • hasNext()vráti, trueak je v množine enum ďalší element
  • next() vráti nasledujúci prvok v množine enum

Odstrániť prvky EnumSet

  • remove() - odstráni zadaný prvok zo sady enum
  • removeAll() - odstráni všetky prvky zo sady enum

Naprí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ýkon

EnumSet: (MALÉ, STREDNÉ, VEĽKÉ, VNÚTORNÉ) Je odstránené STREDNÉ? true Sú odstránené všetky prvky? pravda

Iné metódy

Metóda 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 efektívny spôsob ukladania hodnôt enum než druhá sada implementácií (podobne HashSet, TreeSet).

Sada výčtu ukladá iba hodnoty konkrétneho výčtu. Preto JVM už pozná všetky možné hodnoty súpravy.

To je dôvod, prečo sú sady enum interne implementované ako sekvencia bitov. Bits určuje, či sú prvky v množine výčtov prítomné alebo nie.

Bit zodpovedajúceho prvku sa zapne, ak je tento prvok v množine.

Zaujímavé články...