Ebben az oktatóanyagban példák segítségével megismerhetjük a Java EnumSet osztályt és annak különféle módszereit.
A EnumSet
Java gyűjtemények keretrendszerének osztálya egyetlen enum elemeinek megvalósítását biztosítja.
Mielőtt megismerné az EnumSet alkalmazást, feltétlenül ismerje meg a Java Enums alkalmazást.
Megvalósítja a Set felületet.
Az EnumSet létrehozása
Enum halmaz létrehozásához java.util.EnumSet
először importálnunk kell a csomagot.
Más halmazmegvalósításokkal ellentétben az enum halmaznak nincsenek nyilvános konstruktorai. Az előre definiált módszereket kell használnunk egy enumkészlet létrehozásához.
1. Az allOf (méret) használata
A allof()
módszer létrehoz egy felsorolási halmazt, amely tartalmazza a megadott összesítés típusú összes értéket. Például,
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); ) )
Kimenet
EnumSet: (KIS, KÖZEPES, NAGY, EXTRALARGE)
Figyelje meg az állítást,
EnumSet sizes = EnumSet.allOf(Size.class);
Itt a Size.class az általunk létrehozott Size enum-ot jelöli.
2. A noneOf (Size) használata
A noneOf()
módszer egy üres enum halmazt hoz létre. Például,
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); ) )
Kimenet
Üres EnumSet: ()
Itt létrehoztunk egy üres enumot, amelynek méretei meg vannak nevezve.
Megjegyzés : Csak a fenti programba helyezhetünk be Enum típusú elemeket. Ez azért van, mert az üres enumkészletünket a Size enum használatával hoztuk létre.
3. A tartomány (e1, e2) módszer használata
A range()
módszer létrehoz egy enum halmazt, amely tartalmazza az e1 és e2 közötti felsorolás összes értékét, beleértve mindkét értéket. Például,
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); ) )
Kimenet
EnumSet: (KÖZEPES, NAGY, EXTRALARGE)
4. A () módszer használata
A of()
módszer létrehoz egy felsorolást, amely a megadott elemeket tartalmazza. Például,
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); ) )
Kimenet
EnumSet1: (KÖZEPES) EnumSet2: (KIS, NAGY)
Az EnumSet módszerei
Az EnumSet
osztály olyan módszereket nyújt, amelyek lehetővé teszik számunkra, hogy különböző elemeket hajtsunk végre az enum halmazon.
Helyezze be az elemeket az EnumSetbe
add()
- a megadott enum értékeket beszúrja az enum halmazbaaddAll()
beszúrja a készletbe a megadott gyűjtemény összes elemét
Például,
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); ) )
Kimenet
EnumSet az add () használatával: (MEDIUM) EnumSet az addAll () használatával: (SMALL, MEDIUM, LARGE, EXTRALARGE)
A fenti példában azt a addAll()
módszert alkalmaztuk, hogy egy enum halmazméret1 összes elemét beszúrjuk egy enum halmazméretbe2.
Az is lehetséges, hogy helyezze elemek más gyűjteményekből, például ArrayList
, LinkedList
stb, hogy enum beállított addAll()
. Az összes gyűjteménynek azonban azonos enum típusúnak kell lennie.
Hozzáférés az EnumSet elemekhez
Az enum halmaz elemeihez való hozzáféréshez használhatjuk a iterator()
módszert. Ennek a módszernek a használatához importálnunk kell a java.util.Iterator
csomagot. Például,
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(", "); ) ) )
Kimenet
EnumSet: KIS, KÖZEPES, NAGY, EXTRALARGE,
Megjegyzés :
hasNext()
visszatér,true
ha van egy következő elem az enum halmazbannext()
az enum halmaz következő elemét adja eredményül
Távolítsa el az EnumSet Elements elemet
remove()
- eltávolítja a megadott elemet az enum halmazbólremoveAll()
- eltávolítja az összes elemet az enum halmazból
Például,
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); ) )
Kimenet
EnumSet: (KIS, KÖZEPES, NAGY, EXTRALARGE) KÖZEPES eltávolítva? igaz Minden elem eltávolításra került? igaz
Egyéb módszerek
Módszer | Leírás |
---|---|
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?
Ez EnumSet
hatékony módot kínál az enum értékek tárolására, mint a többi beállított megvalósítás (például HashSet
, TreeSet
).
Az enum halmaz csak egy adott enum értékeit tárolja. Ezért a JVM már ismeri a halmaz összes lehetséges értékét.
Ez az oka annak, hogy az enum halmazokat belsõ sorozatként belsõ módon valósítják meg. A Bits megadja, hogy vannak-e elemek az enum halmazban, vagy sem.
A megfelelő elem bitje be van kapcsolva, ha az elem jelen van a halmazban.