Java EnumMap

In deze tutorial leren we met behulp van voorbeelden over de Java EnumMap-klasse en de bewerkingen ervan.

De EnumMapklasse van het Java-verzamelingsraamwerk biedt een kaartimplementatie voor elementen van een enum.

In EnumMapworden enum-elementen als sleutels gebruikt . Het implementeert de kaartinterface.

Voordat we er iets over leren EnumMap, moet u de Java Enums kennen.

Een EnumMap maken

Om een ​​enum-map te maken, moeten we eerst het java.util.EnumMappakket importeren . Zodra we het pakket hebben geïmporteerd, is hier hoe we enum-kaarten in Java kunnen maken.

 enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) EnumMap sizes = new EnumMap(Size.class); 

In het bovenstaande voorbeeld hebben we een opsommingskaart gemaakt met de naam maten.

Hier,

  • Grootte - sleutels van de opsomming die worden toegewezen aan waarden
  • Geheel getal - waarden van de opsommingskaart die is gekoppeld aan de bijbehorende sleutels

Methoden van EnumMap

De EnumMapklasse biedt methoden waarmee we verschillende elementen op de enum-kaarten kunnen uitvoeren.

Voeg elementen toe aan EnumMap

  • put() - voegt de opgegeven sleutel / waarde-toewijzing (invoer) in de enum-kaart in
  • putAll() - voegt alle gegevens van een opgegeven kaart in op deze kaart

Bijvoorbeeld,

 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); ) ) 

Uitvoer

 EnumMap1: (SMALL = 28, MEDIUM = 32) EnumMap2: (SMALL = 28, MEDIUM = 32, LARGE = 36) 

In het bovenstaande voorbeeld hebben we de putAll()methode gebruikt om alle elementen van een enum-kaart maten1 in een enum-kaart met maten2 in te voegen.

Het is ook mogelijk om elementen van andere kaarten zoals voegen HashMap, TreeMapetc. een opsomming kaart gebruikt putAll(). Alle kaarten moeten echter van hetzelfde opsommingstype zijn.

Toegang tot EnumMap Elements

1. entrySet (), keySet () en values ​​() gebruiken

  • entrySet() - geeft een set van alle sleutels / waarden mapping (invoer) van een enum-map
  • keySet() - geeft een set van alle sleutels van een opsommingskaart terug
  • values() - geeft een set van alle waarden van een opsommingskaart terug

Bijvoorbeeld,

 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()); ) ) 

Uitvoer

 EnumMap: (SMALL = 28, MEDIUM = 32, LARGE = 36, EXTRALARGE = 40) Sleutel- / waardetoewijzingen: (SMALL = 28, MEDIUM = 32, LARGE = 36, EXTRALARGE = 40) Toetsen: (SMALL, MEDIUM, LARGE, EXTRALARGE) Waarden: (28, 32, 36, 40) 

2. Gebruik de methode get ()

De get()methode retourneert de waarde die is gekoppeld aan de opgegeven sleutel. Het keert terug nullals de opgegeven sleutel niet wordt gevonden.

Bijvoorbeeld,

 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); ) ) 

Uitvoer

 EnumMap: (SMALL = 28, MEDIUM = 32, LARGE = 36, EXTRALARGE = 40) Waarde van MEDIUM: 32 

Verwijder EnumMap Elements

  • remove(key) - retourneert en verwijdert het item dat is gekoppeld aan de opgegeven sleutel van de kaart
  • remove(key, value) - verwijdert het item van de kaart alleen als de opgegeven sleutel is toegewezen aan de opgegeven waarde en een booleaanse waarde retourneert

Bijvoorbeeld,

 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); ) ) 

Uitvoer

EnumMap: (SMALL = 28, MEDIUM = 32, LARGE = 36, EXTRALARGE = 40) Verwijderde Waarde: 32 Is de vermelding (SMALL = 28) verwijderd? Ware bijgewerkte EnumMap: (LARGE = 36, EXTRALARGE = 40)

Vervang EnumMap-elementen

  • replace(key, value) - vervangt de waarde die is gekoppeld aan de opgegeven sleutel door de nieuwe waarde
  • replace(key, old, new) - vervangt de oude waarde alleen door de nieuwe waarde als de oude waarde al is gekoppeld aan de opgegeven sleutel
  • replaceAll(function) - vervangt elke waarde van de kaart door het resultaat van de opgegeven functie
 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); ) ) 

Uitvoer

 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.

Met de Serializableinterface kunnen klassen worden geserialiseerd. Dit betekent dat objecten van de geïmplementeerde klassen Serializablekunnen worden geconverteerd naar bits of bytes.

Interessante artikelen...