Σε αυτό το σεμινάριο, θα μάθουμε για την τάξη Java EnumSet και τις διάφορες μεθόδους με τη βοήθεια παραδειγμάτων.
Η EnumSet
κλάση του πλαισίου συλλογών Java παρέχει μια καθορισμένη υλοποίηση στοιχείων ενός ενιαίου enum.
Πριν μάθετε για το EnumSet, φροντίστε να γνωρίζετε για το Java Enums.
Υλοποιεί τη διεπαφή Set.
Δημιουργία EnumSet
Για να δημιουργήσουμε ένα σύνολο enum, πρέπει java.util.EnumSet
πρώτα να εισαγάγουμε το πακέτο.
Σε αντίθεση με άλλες εφαρμογές σετ, το σύνολο enum δεν έχει δημόσιους κατασκευαστές. Πρέπει να χρησιμοποιήσουμε τις προκαθορισμένες μεθόδους για να δημιουργήσουμε ένα σύνολο enum.
1. Χρήση allOf (Μέγεθος)
Η allof()
μέθοδος δημιουργεί ένα σύνολο enum που περιέχει όλες τις τιμές του καθορισμένου μεγέθους τύπου enum. Για παράδειγμα,
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); ) )
Παραγωγή
EnumSet: (ΜΙΚΡΟ, ΜΕΣΟ, ΜΕΓΑΛΟ, ΕΞΩΤΕΡΙΚΟ)
Παρατηρήστε τη δήλωση,
EnumSet sizes = EnumSet.allOf(Size.class);
Εδώ, το Size.class δηλώνει το μέγεθος enum που έχουμε δημιουργήσει.
2. Χρήση noneOf (Μέγεθος)
Η noneOf()
μέθοδος δημιουργεί ένα κενό σύνολο enum. Για παράδειγμα,
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); ) )
Παραγωγή
Κενό EnumSet: ()
Εδώ, δημιουργήσαμε ένα κενό μέγεθος με όνομα.
Σημείωση : Μπορούμε να εισάγουμε μόνο στοιχεία μεγέθους τύπου enum στο παραπάνω πρόγραμμα. Είναι επειδή δημιουργήσαμε το άδειο σύνολο enum χρησιμοποιώντας το μέγεθος enum.
3. Χρήση της μεθόδου εύρους (e1, e2)
Η range()
μέθοδος δημιουργεί ένα σύνολο enum που περιέχει όλες τις τιμές ενός enum μεταξύ e1 και e2 συμπεριλαμβανομένων και των δύο τιμών. Για παράδειγμα,
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); ) )
Παραγωγή
EnumSet: (MEDIUM, LARGE, EXTRALARGE)
4. Χρήση της μεθόδου ()
Η of()
μέθοδος δημιουργεί ένα σύνολο enum που περιέχει τα καθορισμένα στοιχεία. Για παράδειγμα,
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); ) )
Παραγωγή
EnumSet1: (MEDIUM) EnumSet2: (ΜΙΚΡΟ, ΜΕΓΑΛΟ)
Μέθοδοι EnumSet
Το EnumSet
μάθημα παρέχει μεθόδους που μας επιτρέπουν να εκτελέσουμε διάφορα στοιχεία στο σύνολο enum.
Εισαγωγή στοιχείων στο EnumSet
add()
- εισάγει καθορισμένες τιμές enum στο σύνολο enumaddAll()
εισάγει όλα τα στοιχεία της καθορισμένης συλλογής στο σύνολο
Για παράδειγμα,
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); ) )
Παραγωγή
EnumSet χρησιμοποιώντας add (): (MEDIUM) EnumSet χρησιμοποιώντας addAll (): (SMALL, MEDIUM, LARGE, EXTRALARGE)
Στο παραπάνω παράδειγμα, χρησιμοποιήσαμε τη addAll()
μέθοδο για να εισαγάγουμε όλα τα στοιχεία ενός μεγέθους σετ enum1 σε ένα σύνολο μεγεθών 2
Είναι επίσης δυνατή η εισαγωγή στοιχείων από άλλες συλλογές, όπως ArrayList
, LinkedList
κλπ σε μια σειρά απαρίθμησης χρήση addAll()
. Ωστόσο, όλες οι συλλογές πρέπει να είναι του ίδιου τύπου enum.
Πρόσβαση στα στοιχεία EnumSet
Για πρόσβαση σε στοιχεία ενός συνόλου enum, μπορούμε να χρησιμοποιήσουμε τη iterator()
μέθοδο. Για να χρησιμοποιήσετε αυτήν τη μέθοδο, πρέπει να εισαγάγετε το java.util.Iterator
πακέτο. Για παράδειγμα,
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(", "); ) ) )
Παραγωγή
EnumSet: ΜΙΚΡΟ, ΜΕΣΟ, ΜΕΓΑΛΟ, ΕΞΩΤΕΡΙΚΟ,
Σημείωση :
hasNext()
επιστρέφειtrue
εάν υπάρχει ένα επόμενο στοιχείο στο σύνολο enumnext()
επιστρέφει το επόμενο στοιχείο στο σύνολο enum
Κατάργηση στοιχείων EnumSet
remove()
- αφαιρεί το καθορισμένο στοιχείο από το σύνολο enumremoveAll()
- αφαιρεί όλα τα στοιχεία από το σύνολο enum
Για παράδειγμα,
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); ) )
Παραγωγή
EnumSet: (ΜΙΚΡΟ, ΜΕΣΟ, ΜΕΓΑΛΟ, ΕΞΩΤΕΡΙΚΟ) Καταργείται το MEDIUM; αλήθεια Καταργούνται όλα τα στοιχεία; αληθής
Άλλες μέθοδοι
Μέθοδος | Περιγραφή |
---|---|
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?
Το EnumSet
παρέχει έναν αποτελεσματικό τρόπο για την αποθήκευση τιμών enum από άλλο σετ υλοποιήσεις (όπως HashSet
, TreeSet
).
Ένα σύνολο enum αποθηκεύει μόνο τις τιμές enum ενός συγκεκριμένου enum. Ως εκ τούτου, το JVM γνωρίζει ήδη όλες τις πιθανές τιμές του σετ.
Αυτός είναι ο λόγος για τον οποίο τα σύνολα enum εφαρμόζονται εσωτερικά ως ακολουθία bit. Το Bits καθορίζει εάν υπάρχουν στοιχεία στο σύνολο enum ή όχι.
Το bit ενός αντίστοιχου στοιχείου είναι ενεργοποιημένο εάν αυτό το στοιχείο υπάρχει στο σύνολο.