Java EnumSet

Σε αυτό το σεμινάριο, θα μάθουμε για την τάξη 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 στο σύνολο enum
  • addAll() εισάγει όλα τα στοιχεία της καθορισμένης συλλογής στο σύνολο

Για παράδειγμα,

 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εάν υπάρχει ένα επόμενο στοιχείο στο σύνολο enum
  • next() επιστρέφει το επόμενο στοιχείο στο σύνολο enum

Κατάργηση στοιχείων EnumSet

  • remove() - αφαιρεί το καθορισμένο στοιχείο από το σύνολο enum
  • removeAll() - αφαιρεί όλα τα στοιχεία από το σύνολο 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 ενός αντίστοιχου στοιχείου είναι ενεργοποιημένο εάν αυτό το στοιχείο υπάρχει στο σύνολο.

ενδιαφέροντα άρθρα...