Java EnumMap

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

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

 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() - επιστρέφει ένα σύνολο όλων των πλήκτρων / χαρτογράφησης τιμών (καταχώριση) ενός χάρτη enum
  • keySet() - επιστρέφει ένα σύνολο όλων των κλειδιών ενός χάρτη enum
  • values() - επιστρέφει ένα σύνολο όλων των τιμών ενός χάρτη 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.

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