Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

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.

Java EnumMap beheersen: Efficiënte key-value mapping met enums

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-map
  • putAll() - 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-map
  • keySet() - retourneert een set van alle keys van een enum-map
  • values() - 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 map
  • remove(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 value
  • replace(key, old, new) - vervangt de old waarde met de new waarde alleen als de old waarde al geassocieerd is met de gespecificeerde key
  • replaceAll(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

MethodeBeschrijving
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

  1. C Enums onder de knie krijgen: Definitie, declaratie en vlag-operaties
  2. Java-operators beheersen: typen, syntax en praktische voorbeelden
  3. Java-commentaar: typen, gebruik en best practices
  4. Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
  5. Java Strings beheersen: aanmaken, methodes en best practices
  6. Java interfaces meesteren: concepten, implementatie en best practices
  7. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  8. Java Enums meesteren: complete gids tot Enums & Enum klassen
  9. Java Enum constructors uitgelegd met praktisch voorbeeld
  10. String representaties in Java Enums meesteren
  11. Java Try-with-resources meesteren: automatische resource management uitgelegd