Java EnumMap beheersen: Efficiënte key-value mapping met enums
Java EnumMap
In deze tutorial leren we over de Java EnumMap-klasse en de operaties ervan met behulp van voorbeelden.
De EnumMap-klasse van het Java collections framework biedt een map-implementatie voor elementen van een enum.
In EnumMap worden enum-elementen gebruikt als keys. Het implementeert de Map-interface.

Voordat we leren over EnumMap, zorg dat je kennis hebt van Java Enums.
Een EnumMap aanmaken
Om een enum-map aan te maken, moeten we eerst het java.util.EnumMap-pakket importeren. Zodra we het pakket importeren, is dit hoe we enum-maps in Java kunnen aanmaken.
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
In het bovenstaande voorbeeld hebben we een enum-map genaamd sizes aangemaakt.
Hierbij:
- Size - keys van de enum die mappen naar waarden
- Integer - values van de enum-map geassocieerd met de corresponderende keys
Methoden van EnumMap
De EnumMap-klasse biedt methoden waarmee we diverse operaties op de enum-maps kunnen uitvoeren.
Elementen invoegen in EnumMap
put()- voegt de gespecificeerde key/value-mapping (entry) toe aan de enum-mapputAll()- voegt alle entries van een gespecificeerde map toe aan deze map
Bijvoorbeeld,
import java.util.EnumMap; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // Een EnumMap aanmaken van de Size enum EnumMap<Size, Integer> sizes1 = new EnumMap<>(Size.class); // put() methode gebruiken sizes1.put(Size.SMALL, 28); sizes1.put(Size.MEDIUM, 32); System.out.println("EnumMap1: " + sizes1); EnumMap<Size, Integer> sizes2 = new EnumMap<>(Size.class); // putAll() methode gebruiken sizes2.putAll(sizes1); sizes2.put(Size.LARGE, 36); System.out.println("EnumMap2: " + sizes2); } }
Output
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-map sizes1 in te voegen in een enum-map van sizes2.
Het is ook mogelijk om elementen uit andere maps zoals HashMap, TreeMap, etc. in te voegen in een enum-map met putAll(). Alle maps moeten echter van hetzelfde enum-type zijn.
EnumMap-elementen benaderen
1. Met entrySet(), keySet() en values()
entrySet()- retourneert een set van alle key/value-mappings (entry) van een enum-mapkeySet()- retourneert een set van alle keys van een enum-mapvalues()- retourneert een set van alle waarden van een enum-map
Bijvoorbeeld,
import java.util.EnumMap; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // Een EnumMap aanmaken van de Size enum EnumMap<Size, Integer> 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); // entrySet() methode gebruiken System.out.println("Key/Value mappings: " + sizes.entrySet()); // keySet() methode gebruiken System.out.println("Keys: " + sizes.keySet()); // values() methode gebruiken System.out.println("Values: " + sizes.values()); } }
Output
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} Key/Value mappings: [SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40] Keys: [SMALL, MEDIUM, LARGE, EXTRALARGE] Values: [28, 32, 36, 40]
2. Met de get()-methode
De get()-methode retourneert de waarde geassocieerd met de gespecificeerde key. Het retourneert null als de gespecificeerde key niet gevonden wordt.
Bijvoorbeeld,
import java.util.EnumMap; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // Een EnumMap aanmaken van de Size enum EnumMap<Size, Integer> 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); // get() methode gebruiken int value = sizes.get(Size.MEDIUM); System.out.println("Waarde van MEDIUM: " + value); } }
Output
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} Waarde van MEDIUM: 32
EnumMap-elementen verwijderen
remove(key)- retourneert en verwijdert de entry geassocieerd met de gespecificeerde key uit de mapremove(key, value)- verwijdert de entry uit de map alleen als de gespecificeerde key gemapt was naar de gespecificeerde waarde en retourneert een boolean-waarde
Bijvoorbeeld,
import java.util.EnumMap; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // Een EnumMap aanmaken van de Size enum EnumMap<Size, Integer> 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); // remove() methode gebruiken int value = sizes.remove(Size.MEDIUM); System.out.println("Verwijderde waarde: " + value); boolean result = sizes.remove(Size.SMALL, 28); System.out.println("Is de entry {SMALL=28} verwijderd? " + result); System.out.println("Bijgewerkte EnumMap: " + sizes); } }
Output
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} Verwijderde waarde: 32 Is de entry {SMALL=28} verwijderd? True Bijgewerkte EnumMap: {LARGE=36, EXTRALARGE=40}
EnumMap-elementen vervangen
replace(key, value)- vervangt de waarde geassocieerd met de gespecificeerde key door de nieuwe valuereplace(key, old, new)- vervangt de old waarde met de new waarde alleen als de old waarde al geassocieerd is met de gespecificeerde keyreplaceAll(function)- vervangt elke waarde van de map met het resultaat van de gespecificeerde function
import java.util.EnumMap; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // Een EnumMap aanmaken van de Size enum EnumMap<Size, Integer> 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); // replace() methode gebruiken sizes.replace(Size.MEDIUM, 30); sizes.replace(Size.LARGE, 36, 34); System.out.println("EnumMap met replace(): " + sizes); // replaceAll() methode gebruiken sizes.replaceAll((key, oldValue) -> oldValue + 3); System.out.println("EnumMap met replaceAll(): " + sizes); } }
Output
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} EnumMap met replace(): {SMALL=28, MEDIUM=30, LARGE=34, EXTRALARGE=40} EnumMap met replaceAll(): {SMALL=31, MEDIUM=33, LARGE=37, EXTRALARGE=43}
In het bovenstaande programma, let op de statement
sizes.replaceAll((key, oldValue) -> oldValue + 3);
Hier benadert de methode alle entries van de map. Vervangt vervolgens alle waarden met de nieuwe waarden geleverd door de lambda-expressies.
Overige methoden
| Methode | Beschrijving |
|---|---|
clone() | Maakt een kopie van de EnumMap |
containsKey() | Doorzoekt de EnumMap naar de gespecificeerde key en retourneert een boolean-resultaat |
containsValue() | Doorzoekt de EnumMap naar de gespecificeerde waarde en retourneert een boolean-resultaat |
size() | Retourneert de grootte van de EnumMap |
clear() | Verwijdert alle entries uit de EnumMap |
EnumSet vs. EnumMap
Zowel de EnumSet als EnumMap-klasse bieden datastructuren om enum-waarden op te slaan. Er bestaan echter enkele grote verschillen tussen hen.
- Enum set wordt intern voorgesteld als een reeks bits, terwijl de enum-map intern als arrays voorgesteld wordt.
- Enum set wordt aangemaakt met vooraf gedefinieerde methoden zoals
allOf(),noneOf(),of(), etc. Een enum-map wordt echter aangemaakt met de constructor.
Cloneable en Serializable Interfaces
De EnumMap-klasse implementeert ook Cloneable en Serializable interfaces.
Cloneable Interface
Het stelt de EnumMap-klasse in staat om een kopie van instanties van de klasse te maken.
Serializable Interface
Wanneer Java-objecten over een netwerk verzonden moeten worden, moeten objecten geconverteerd worden naar bits of bytes. Dit is omdat Java-objecten niet direct over het netwerk verzonden kunnen worden.
De Serializable-interface stelt klassen in staat om geserialiseerd te worden. Dit betekent dat objecten van klassen die Serializable implementeren, geconverteerd kunnen worden naar bits of bytes.
Java
- C Enums onder de knie krijgen: Definitie, declaratie en vlag-operaties
- Java-operators beheersen: typen, syntax en praktische voorbeelden
- Java-commentaar: typen, gebruik en best practices
- Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
- Java Strings beheersen: aanmaken, methodes en best practices
- Java interfaces meesteren: concepten, implementatie en best practices
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Enums meesteren: complete gids tot Enums & Enum klassen
- Java Enum constructors uitgelegd met praktisch voorbeeld
- String representaties in Java Enums meesteren
- Java Try-with-resources meesteren: automatische resource management uitgelegd