Java EnumSet

Tässä opetusohjelmassa opitaan Java EnumSet -luokasta ja sen erilaisista menetelmistä esimerkkien avulla.

EnumSetLuokka Java kokoelmien kehys tarjoaa joukon osien täytäntöönpanoa yhden ENUM.

Ennen kuin opit EnumSetistä, muista tietää Java Enums.

Se toteuttaa Set-käyttöliittymän.

EnumSetin luominen

Jotta voisimme luoda luettelon, meidän on java.util.EnumSetensin tuotava paketti.

Toisin kuin muut joukototeutukset, enum-joukolla ei ole julkisia rakentajia. Meidän on käytettävä ennalta määritettyjä menetelmiä luodaksesi laskentaryhmän.

1. AllOf (Koko) -toiminnon käyttäminen

allof()Menetelmä luo ENUM joukko, joka sisältää kaikki arvot määritetyn ENUM tyyppi Koko. Esimerkiksi,

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

Tuotos

 EnumSet: (PIENI, KESKI, SUURI, YLIMITTÄINEN) 

Huomaa lausunto,

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

Tässä Size.class tarkoittaa luomaa kokoarvoa.

2. Käyttämällä noneOf (Koko)

noneOf()Menetelmä luo tyhjän ENUM joukko. Esimerkiksi,

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

Tuotos

 Tyhjä EnumSet: () 

Tässä olemme luoneet tyhjän luettelon, jonka nimet ovat kokoja.

Huomaa : Voimme lisätä vain enum-tyyppisiä elementtejä Size edellä olevaan ohjelmaan. Se johtuu siitä, että loimme tyhjän luettelon käyttämällä kokoa enum.

3. Käyttämällä alue (e1, e2) -menetelmää

range()Menetelmä luo ENUM joukko sisältää kaikki arvot ENUM välillä e1 ja e2 mukaan lukien sekä arvot. Esimerkiksi,

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

Tuotos

 EnumSet: (KESKI, SUURI, YLIMITTÄINEN) 

4. () -menetelmän käyttö

of()Menetelmä luo ENUM joukko, joka sisältää spesifioidun elementtejä. Esimerkiksi,

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

Tuotos

 EnumSet1: (KESKI) EnumSet2: (PIENI, SUURI) 

EnumSetin menetelmät

EnumSetLuokan tarjoaa menetelmiä, joiden avulla voimme tehdä erilaisia elementtejä ENUM asetettu.

Lisää elementit EnumSetiin

  • add() - lisää määritetyt enum-arvot enum-ryhmään
  • addAll() lisää kaikki määritetyn kokoelman elementit sarjaan

Esimerkiksi,

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

Tuotos

 EnumSet käyttämällä add (): (MEDIUM) EnumSet käyttämällä addAll (): (SMALL, MEDIUM, LARGE, EXTRALARGE) 

Yllä olevassa esimerkissä olemme käyttäneet addAll()menetelmää lisätäksesi enumjoukon kokojen1 kaikki elementit enumjoukkokokoihin2.

On myös mahdollista lisätä elementtejä muista kokoelmista kuten ArrayList, LinkedListjne ENUM asetettuun addAll(). Kaikkien kokoelmien tulisi kuitenkin olla samaa tyyppiä.

Avaa EnumSet Elements

Päästäksesi enumjoukon elementteihin voimme käyttää iterator()menetelmää. Tämän menetelmän käyttämiseksi meidän on tuotava java.util.Iteratorpaketti. Esimerkiksi,

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

Tuotos

 EnumSet: PIENI, KESKI, SUURI, YLIMITTÄINEN, 

Huomaa :

  • hasNext()palauttaa, truejos enumjoukossa on seuraava elementti
  • next() palauttaa enumjoukon seuraavan elementin

Poista EnumSet Elements

  • remove() - poistaa määritetyn elementin luettelosta
  • removeAll() - poistaa kaikki elementit enum-joukosta

Esimerkiksi,

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

Tuotos

EnumSet: (PIENI, KESKITTÄIN, SUURI, YLIMITTÄINEN) Poistetaanko KESKITTÄINEN? true Poistetaanko kaikki elementit? totta

Muut menetelmät

Menetelmä Kuvaus
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?

Se EnumSettarjoaa tehokkaan tavan tallentaa enum-arvoja kuin muut asetetut toteutukset (kuten HashSet, TreeSet).

Enumjoukko tallentaa vain tietyn enum-arvot. Siksi JVM tietää jo kaikki joukon mahdolliset arvot.

Tämä on syy miksi enumjoukot toteutetaan sisäisesti bittisarjana. Bits määrittää, onko elementtejä läsnä joukossa vai ei.

Vastaavan elementin bitti kytketään päälle, jos kyseinen elementti on joukossa.

Mielenkiintoisia artikkeleita...