Java EnumSet

U ovom uputstvu uz primjere ćemo naučiti o klasi Java EnumSet i njezinim raznim metodama.

EnumSetKlasa 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.EnumSetpaket.

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

EnumSetKlasa 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 nabrajanja
  • addAll() 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, LinkedListitd 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.Iteratorpaket. 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ća trueako postoji sljedeći element u skupu nabrajanja
  • next() vraća sljedeći element u skupu nabrajanja

Uklonite EnumSet elemente

  • remove() - uklanja navedeni element iz skupa nabrajanja
  • removeAll() - 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?

EnumSetPruž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.

Zanimljivi članci...