Java EnumSet

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 EnumSetJava 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.EnumSetelő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 EnumSetosztá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 halmazba
  • addAll() 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, LinkedListstb, 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.Iteratorcsomagot. 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, trueha van egy következő elem az enum halmazban
  • next() 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ól
  • removeAll() - 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 EnumSethaté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.

érdekes cikkek...