U ovom uputstvu uz primjere ćemo naučiti o klasi Java EnumSet i njezinim raznim metodama.
EnumSet
Klasa Java zbirki okvir pruža set provedbu elemenata jednog nabrajanja.
Prije nego što naučite o EnumSetu, pobrinite se da znate o Java Enumovima.
Provodi sučelje Set.
Izrada EnumSet-a
Da bismo stvorili skup nabrajanja, prvo moramo uvesti java.util.EnumSet
paket.
Za razliku od drugih implementacija skupova, skup enum nema javne konstruktore. Moramo se koristiti unaprijed definiranim metodama da bismo stvorili skup popisa.
1. Korištenje allOf (veličina)
allof()
Metoda stvara nabrajanja skup koji sadrži sve vrijednosti određenog tipa enum veličina. Na primjer,
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); ) )
Izlaz
EnumSet: (MALI, SREDNJI, VELIKI, VELIKI)
Primijetite izjavu,
EnumSet sizes = EnumSet.allOf(Size.class);
Ovdje Size.class označava nabrajanje veličine koje smo stvorili.
2. Korištenje noneOf (veličina)
noneOf()
Metoda stvara prazan nabrajanja set. Na primjer,
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); ) )
Izlaz
Isprazni skup Enum: ()
Ovdje smo stvorili prazan nabrajanje naziva veličine.
Napomena : U gornji program možemo umetnuti samo elemente enum tipa Size. To je zato što smo kreirali svoj prazni skup nabrajanja pomoću nabrajanja veličine.
3. Uporaba metode raspona (e1, e2)
range()
Metoda stvara nabrajanja set sadrži sve vrijednosti nekog nabrajanja između E1 i E2, uključujući obje vrijednosti. Na primjer,
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); ) )
Izlaz
EnumSet: (SREDNJI, VELIKI, VELIKI)
4. Korištenje metode ()
of()
Metoda stvara nabrajanja set sadrži navedene elemente. Na primjer,
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); ) )
Izlaz
EnumSet1: (SREDNJI) EnumSet2: (MALI, VELIKI)
Metode EnumSet-a
EnumSet
Klasa pruža metode koje omogućuju nam da obavljaju različite elemente na nabrajanja setu.
Umetnite elemente u EnumSet
add()
- ubacuje navedene vrijednosti nabrajanja u skup nabrajanjaaddAll()
u skup ubacuje sve elemente navedene zbirke
Na primjer,
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); ) )
Izlaz
EnumSet pomoću add (): (MEDIUM) EnumSet pomoću addAll (): (SMALL, SREDNJI, VELIKI, EXTRALARGE)
U gore navedenom primjeru koristili smo addAll()
metodu za umetanje svih elemenata enum skupa size1 u enum set sizes2.
Također je moguće umetnuti elemente iz drugih zbirki, kao što su ArrayList
, LinkedList
itd do nabrajanja set korištenjem addAll()
. Međutim, sve zbirke trebale bi biti istog popisa.
Pristupite elementima EnumSet
Za pristup elementima skupa nabrajanja možemo koristiti iterator()
metodu. Da bismo koristili ovu metodu, moramo uvesti java.util.Iterator
paket. Na primjer,
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(", "); ) ) )
Izlaz
EnumSet: MALI, SREDNJI, VELIKI, VELIKI,
Napomena :
hasNext()
vraćatrue
ako postoji sljedeći element u skupu nabrajanjanext()
vraća sljedeći element u skupu nabrajanja
Uklonite EnumSet elemente
remove()
- uklanja navedeni element iz skupa nabrajanjaremoveAll()
- uklanja sve elemente iz enum skupa
Na primjer,
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); ) )
Izlaz
EnumSet: (MALO, SREDNJE, VELIKO, VELIKO) Je li uklonjeno SREDNJE? true Jesu li uklonjeni svi elementi? pravi
Ostale metode
Metoda | Opis |
---|---|
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
Pruža učinkovit način za pohranu vrijednosti nabrajanja nego drugi set implementacija (kao HashSet
, TreeSet
).
Skup nabrajanja pohranjuje samo vrijednosti nabrajanja određenog nabrajanja. Dakle, JVM već zna sve moguće vrijednosti skupa.
To je razlog zašto se enum skupovi interno implementiraju kao niz bitova. Bits određuje jesu li elementi prisutni u skupu nabrajanja ili ne.
Bit odgovarajućeg elementa uključuje se ako je taj element prisutan u skupu.