„Java EnumSet“

Šioje pamokoje pavyzdžių pagalba sužinosime apie „Java EnumSet“ klasę ir įvairius jos metodus.

EnumSetJava“ kolekcijų sistemos klasėje galima rinktis vieno enumo elementus.

Prieš sužinodami apie „EnumSet“, būtinai žinokite apie „Java Enums“.

Jis įgyvendina sąsają „Nustatyti“.

„EnumSet“ kūrimas

Norėdami sukurti „enum“ rinkinį, pirmiausia turime importuoti java.util.EnumSetpaketą.

Skirtingai nuo kitų rinkinių realizacijų, „enum“ rinkinyje nėra viešųjų konstruktorių. Turime naudoti iš anksto nustatytus metodus, kad sukurtume apskaitos rinkinį.

1. Naudojant allOf (dydis)

allof()Metodas sukuria ENUM rinkinį, kuriame yra visi konkretaus pervedimą Tipas Dydis vertybes. Pavyzdžiui,

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

Rezultatas

 „EnumSet“: (MAŽAS, VIDUTINIS, DIDELIS, EKSTALARUS) 

Atkreipkite dėmesį į pareiškimą,

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

Čia „Size.class“ žymi mūsų sukurtą „Size enum“.

2. Naudojant noneOf (dydis)

noneOf()Metodas sukuria tuščią ENUM rinkinį. Pavyzdžiui,

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

Rezultatas

 Tuščias „EnumSet“: () 

Čia mes sukūrėme tuščią sąrašą, pavadintą dydžiais.

Pastaba : į aukščiau pateiktą programą galime įterpti tik enum tipo „Size“ elementus. Taip yra todėl, kad mes sukūrėme tuščią enum rinkinį naudodami „Size enum“.

3. Naudojant diapazono (e1, e2) metodą

range()Metodas sukuria ENUM rinkinys, kuriame yra visi tarp E1 ir E2 įskaitant abiejų vertybių ENUM vertybes. Pavyzdžiui,

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

Rezultatas

 „EnumSet“: (MEDIUM, LARGE, EXTRALARGE) 

4. Metodo () naudojimas

of()Metodas sukuria ENUM rinkinį, kuriame yra nurodytas elementus. Pavyzdžiui,

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

Rezultatas

 „EnumSet1“: (MEDIUM) „EnumSet2“: (MAŽAS, DIDELIS) 

„EnumSet“ metodai

EnumSetKlasė suteikia metodus, kurie leidžia mums atlikti įvairius elementus ENUM rinkinys.

Įterpti elementus į „EnumSet“

  • add() - įtraukia nurodytas enum reikšmes į enum rinkinį
  • addAll() į rinkinį įterpia visus nurodytos kolekcijos elementus

Pavyzdžiui,

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

Rezultatas

 „EnumSet“ naudodami add (): (MEDIUM) „EnumSet“ naudodami addAll (): (SMALL, MEDIUM, LARGE, EXTRALARGE) 

Ankstesniame pavyzdyje mes naudojome addAll()metodą, įterpdami visus enum aibės dydžių1 elementus į enum aibės dydžių2 elementus.

Taip pat galima įterpti elementus iš kitų kolekcijų, tokių kaip ArrayList, LinkedListir pan. Į rinkinį naudojant addAll(). Tačiau visos kolekcijos turėtų būti to paties tipo.

Prieiga prie „EnumSet Elements“

Norėdami pasiekti „enum“ rinkinio elementus, galime naudoti iterator()metodą. Norėdami naudoti šį metodą, turime importuoti java.util.Iteratorpaketą. Pavyzdžiui,

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

Rezultatas

 „EnumSet“: Mažas, vidutinis, didelis, labai didelis, 

Pastaba :

  • hasNext()grąžinama, truejei enum rinkinyje yra kitas elementas
  • next() grąžina kitą elementą enum rinkinyje

Pašalinkite „EnumSet Elements“

  • remove() - pašalina nurodytą elementą iš enum rinkinio
  • removeAll() - pašalina visus elementus iš enum rinkinio

Pavyzdžiui,

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

Rezultatas

„EnumSet“: (MAŽAS, VIDUTINIS, DIDELIS, YPATINGAS) Ar vidutinė pašalinta? tiesa Ar visi elementai pašalinami? tiesa

Kiti metodai

Metodas apibūdinimas
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?

Tai EnumSetsuteikia efektyvų būdą kaupti enum vertes nei kiti nustatyti diegimai (pvz. HashSet, TreeSet).

Enum rinkinyje saugomos tik konkretaus enum reikšmės. Taigi JVM jau žino visas galimas rinkinio reikšmes.

Tai yra priežastis, kodėl enum rinkiniai yra įgyvendinami viduje kaip bitų seka. Bitsas nurodo, ar elementų yra enum rinkinyje, ar ne.

Atitinkamo elemento bitas įjungiamas, jei to elemento yra rinkinyje.

Įdomios straipsniai...