Σε αυτό το σεμινάριο, θα μάθουμε για την κλάση Java EnumMap και τις λειτουργίες της με τη βοήθεια παραδειγμάτων.
Η EnumMap
κλάση του πλαισίου συλλογών Java παρέχει μια εφαρμογή χάρτη για στοιχεία ενός enum.
Στο EnumMap
, τα στοιχεία enum χρησιμοποιούνται ως κλειδιά . Εφαρμόζει τη διασύνδεση χάρτη.
Πριν μάθουμε EnumMap
, φροντίστε να γνωρίζετε για τα Java Enums.
Δημιουργία χάρτη Enum
Για να δημιουργήσουμε έναν χάρτη enum, πρέπει java.util.EnumMap
πρώτα να εισαγάγουμε το πακέτο. Μόλις εισαγάγουμε το πακέτο, μπορείτε να δημιουργήσετε χάρτες enum στην Java.
enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) EnumMap sizes = new EnumMap(Size.class);
Στο παραπάνω παράδειγμα, έχουμε δημιουργήσει έναν χάρτη enum που ονομάζεται μεγέθη.
Εδώ,
- Μέγεθος - πλήκτρα του enum που αντιστοιχούν σε τιμές
- Ακέραιος - τιμές του χάρτη enum που σχετίζονται με τα αντίστοιχα πλήκτρα
Μέθοδοι του EnumMap
Η EnumMap
τάξη παρέχει μεθόδους που μας επιτρέπουν να εκτελούμε διάφορα στοιχεία στους χάρτες enum.
Εισαγωγή στοιχείων στο EnumMap
put()
- εισάγει την καθορισμένη αντιστοίχιση κλειδιού / τιμής (καταχώριση) στον χάρτη enumputAll()
- εισάγει όλες τις καταχωρίσεις ενός συγκεκριμένου χάρτη σε αυτόν τον χάρτη
Για παράδειγμα,
import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes1 = new EnumMap(Size.class); // Using the put() Method sizes1.put(Size.SMALL, 28); sizes1.put(Size.MEDIUM, 32); System.out.println("EnumMap1: " + sizes1); EnumMap sizes2 = new EnumMap(Size.class); // Using the putAll() Method sizes2.putAll(sizes1); sizes2.put(Size.LARGE, 36); System.out.println("EnumMap2: " + sizes2); ) )
Παραγωγή
EnumMap1: (SMALL = 28, MEDIUM = 32) EnumMap2: (SMALL = 28, MEDIUM = 32, ΜΕΓΑΛΟ = 36)
Στο παραπάνω παράδειγμα, χρησιμοποιήσαμε τη putAll()
μέθοδο για την εισαγωγή όλων των στοιχείων ενός μεγέθους χάρτη enum1 σε έναν χάρτη μεγέθους 2.
Είναι επίσης δυνατόν να εισαχθεί στοιχεία από άλλους χάρτες όπως HashMap
, TreeMap
, κ.λπ., σε χάρτη enum χρησιμοποιώντας putAll()
. Ωστόσο, όλοι οι χάρτες πρέπει να είναι του ίδιου τύπου enum.
Πρόσβαση στα στοιχεία EnumMap
1. Χρήση του entrySet (), keySet () και των τιμών ()
entrySet()
- επιστρέφει ένα σύνολο όλων των πλήκτρων / χαρτογράφησης τιμών (καταχώριση) ενός χάρτη enumkeySet()
- επιστρέφει ένα σύνολο όλων των κλειδιών ενός χάρτη enumvalues()
- επιστρέφει ένα σύνολο όλων των τιμών ενός χάρτη enum
Για παράδειγμα,
import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes = new EnumMap(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // Using the entrySet() Method System.out.println("Key/Value mappings: " + sizes.entrySet()); // Using the keySet() Method System.out.println("Keys: " + sizes.keySet()); // Using the values() Method System.out.println("Values: " + sizes.values()); ) )
Παραγωγή
EnumMap: (SMALL = 28, MEDIUM = 32, LARGE = 36, EXTRALARGE = 40) Αντιστοίχιση κλειδιού / τιμής: (SMALL = 28, MEDIUM = 32, LARGE = 36, EXTRALARGE = 40) Πλήκτρα: (ΜΙΚΡΟ, ΜΕΣΟ, ΜΕΓΑΛΟ, EXTRALARGE) Τιμές: (28, 32, 36, 40)
2. Χρησιμοποιώντας τη μέθοδο get ()
Η get()
μέθοδος επιστρέφει την τιμή που σχετίζεται με το καθορισμένο κλειδί. Επιστρέφει null
εάν το καθορισμένο κλειδί δεν βρεθεί.
Για παράδειγμα,
import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes = new EnumMap(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // Using the get() Method int value = sizes.get(Size.MEDIUM); System.out.println("Value of MEDIUM: " + value); ) )
Παραγωγή
EnumMap: (ΜΙΚΡΟ = 28, MEDIUM = 32, LARGE = 36, EXTRALARGE = 40) Τιμή MEDIUM: 32
Κατάργηση στοιχείων EnumMap
remove(key)
- επιστρέφει και καταργεί την καταχώριση που σχετίζεται με το καθορισμένο κλειδί από το χάρτηremove(key, value)
- αφαιρεί την καταχώριση από το χάρτη μόνο εάν το καθορισμένο κλειδί αντιστοιχιστεί στην καθορισμένη τιμή και επιστρέψει μια δυαδική τιμή
Για παράδειγμα,
import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes = new EnumMap(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // Using the remove() Method int value = sizes.remove(Size.MEDIUM); System.out.println("Removed Value: " + value); boolean result = sizes.remove(Size.SMALL, 28); System.out.println("Is the entry (SMALL=28) removed? " + result); System.out.println("Updated EnumMap: " + sizes); ) )
Παραγωγή
EnumMap: (SMALL = 28, MEDIUM = 32, LARGE = 36, EXTRALARGE = 40) Αφαιρούμενη τιμή: 32 Καταργείται η καταχώριση (SMALL = 28); True EnumMap: (LARGE = 36, EXTRALARGE = 40)
Αντικαταστήστε τα στοιχεία EnumMap
replace(key, value)
- αντικαθιστά την τιμή που σχετίζεται με το καθορισμένο κλειδί από τη νέα τιμήreplace(key, old, new)
- αντικαθιστά την παλιά τιμή με τη νέα τιμή μόνο εάν η παλιά τιμή έχει ήδη συσχετιστεί με το καθορισμένο κλειδίreplaceAll(function)
- αντικαθιστά κάθε τιμή του χάρτη με το αποτέλεσμα της καθορισμένης συνάρτησης
import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes = new EnumMap(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // Using the replace() Method sizes.replace(Size.MEDIUM, 30); sizes.replace(Size.LARGE, 36, 34); System.out.println("EnumMap using replace(): " + sizes); // Using the replaceAll() Method sizes.replaceAll((key, oldValue) -> oldValue + 3); System.out.println("EnumMap using replaceAll(): " + sizes); ) )
Παραγωγή
EnumMap: (SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40) EnumMap using replace(): (SMALL=28, MEDIUM=30, LARGE=34, EXTRALARGE=40) EnumMap using replaceAll(): (SMALL=31, MEDIUM=33, LARGE=37, EXTRALARGE=43)
In the above program, notice the statement
sizes.replaceAll((key, oldValue) -> oldValue + 3);
Here, the method accesses all the entries of the map. It then replaces all the values with the new values provided by the lambda expressions.
Other Methods
Method | Description |
---|---|
clone() | Creates a copy of the EnumMap |
containsKey() | Searches the EnumMap for the specified key and returns a boolean result |
containsValue() | Searches the EnumMap for the specified value and returns a boolean result |
size() | Returns the size of the EnumMap |
clear() | Removes all the entries from the EnumMap |
EnumSet Vs. EnumMap
Both the EnumSet and EnumMap
class provides data structures to store enum values. However, there exist some major differences between them.
- Enum set is represented internally as a sequence of bits, whereas the enum map is represented internally as arrays.
- Enum set is created using its predefined methods like
allOf()
,noneOf()
,of()
, etc. However, an enum map is created using its constructor.
Clonable and Serializable Interfaces
The EnumMap
class also implements Cloneable
and Serializable
interfaces.
Cloneable Interface
It allows the EnumMap
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.
Η Serializable
διεπαφή επιτρέπει την σειριοποίηση των τάξεων. Αυτό σημαίνει ότι τα αντικείμενα των κλάσεων που εφαρμόζονται Serializable
μπορούν να μετατραπούν σε bits ή byte.