Tässä opetusohjelmassa opitaan Java EnumSet -luokasta ja sen erilaisista menetelmistä esimerkkien avulla.
EnumSet
Luokka 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.EnumSet
ensin 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
EnumSet
Luokan tarjoaa menetelmiä, joiden avulla voimme tehdä erilaisia elementtejä ENUM asetettu.
Lisää elementit EnumSetiin
add()
- lisää määritetyt enum-arvot enum-ryhmäänaddAll()
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
, LinkedList
jne 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.Iterator
paketti. 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,true
jos enumjoukossa on seuraava elementtinext()
palauttaa enumjoukon seuraavan elementin
Poista EnumSet Elements
remove()
- poistaa määritetyn elementin luettelostaremoveAll()
- 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 EnumSet
tarjoaa 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.