Java EnumMap
Java EnumMap
In deze zelfstudie leren we over de Java EnumMap-klasse en zijn bewerkingen aan de hand van voorbeelden.
De EnumMap
klasse van het Java-verzamelingsraamwerk biedt een kaartimplementatie voor elementen van een opsomming.
In EnumMap
, enum-elementen worden gebruikt als sleutels . Het implementeert de kaartinterface.
Voordat we meer te weten komen over EnumMap
, zorg ervoor dat u op de hoogte bent van de Java Enums.
Een EnumMap maken
Om een enum-kaart te maken, moeten we de java.util.EnumMap
. importeren pakket eerst. Zodra we het pakket hebben geïmporteerd, kunnen we als volgt enum-kaarten maken in Java.
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
In het bovenstaande voorbeeld hebben we een enum-map gemaakt met de naam sizes .
Hier,
- Maat - toetsen van de opsomming die naar waarden verwijst
- Geheel getal - waarden van de enum-kaart die is gekoppeld aan de bijbehorende sleutels
Methoden van EnumMap
De EnumMap
class biedt methoden waarmee we verschillende elementen op de enum-kaarten kunnen uitvoeren.
Elementen invoegen in EnumMap
put()
- voegt de opgegeven sleutel/waarde-toewijzing (invoer) toe aan de enum-mapputAll()
- voegt alle vermeldingen van een gespecificeerde kaart toe aan 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<Size, Integer> 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<Size, Integer> 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()
. gebruikt methode om alle elementen van een enum map in te voegen sizes1 naar een overzichtskaart van sizes2 .
Het is ook mogelijk om elementen van andere kaarten in te voegen, zoals HashMap
, TreeMap
, etc. naar een enum-kaart met behulp van putAll()
. Alle kaarten moeten echter van hetzelfde enum-type zijn.
Toegang tot EnumMap-elementen
entrySet()
- retourneert een set van alle sleutels/waarden mapping (invoer) van een enum mapkeySet()
- geeft een set van alle sleutels van een enum-map terugvalues()
- geeft een set van alle waarden van een enum-map 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<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);
// 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} Key/Value mappings: [SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40] Keys: [SMALL, MEDIUM, LARGE, EXTRALARGE] Values: [28, 32, 36, 40]
De get()
methode retourneert de waarde die is gekoppeld aan de opgegeven sleutel. Het retourneert null
als 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<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);
// 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} Value of MEDIUM: 32
EnumMap-elementen verwijderen
remove(key)
- retourneert en verwijdert de invoer die is gekoppeld aan de opgegeven sleutel van de kaartremove(key, value)
- verwijdert het item alleen van de kaart als de opgegeven sleutel is toegewezen aan de opgegeven waarde en retourneert een booleaanse waarde
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<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);
// 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} Removed Value: 32 Is the entry {SMALL=28} removed? True Updated EnumMap: {LARGE=36, EXTRALARGE=40}
EnumMap-elementen vervangen
replace(key, value)
- vervangt de waarde die is gekoppeld aan de opgegeven sleutel door de nieuwe waardereplace(key, old, new)
- vervangt de oude waarde met de nieuwe waarde alleen als de oude waarde is al gekoppeld aan de opgegeven sleutelreplaceAll(function)
- vervangt elke waarde van de kaart door het resultaat van de gespecificeerde 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<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);
// 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}
Let in het bovenstaande programma op de verklaring
sizes.replaceAll((key, oldValue) -> oldValue + 3);
Hier heeft de methode toegang tot alle items van de kaart. Vervolgens worden alle waarden vervangen door de nieuwe waarden die door de lambda-expressies worden geleverd.
Andere methoden
Methode | Beschrijving |
---|---|
clone() | Maakt een kopie van de EnumMap |
containsKey() | Zoekt de EnumMap voor de opgegeven sleutel en geeft een booleaans resultaat |
containsValue() | Zoekt de EnumMap voor de opgegeven waarde en geeft een booleaans resultaat |
size() | Retourneert de grootte van de EnumMap |
clear() | Verwijdert alle vermeldingen van de EnumMap |
EnumSet Vs. EnumMap
Zowel de EnumSet als EnumMap
class biedt gegevensstructuren om opsommingswaarden op te slaan. Er bestaan echter enkele grote verschillen tussen hen.
- Enum-set wordt intern weergegeven als een reeks bits, terwijl de enum-map intern wordt weergegeven als arrays.
- Enum-set wordt gemaakt met behulp van de vooraf gedefinieerde methoden zoals
allOf()
,noneOf()
,of()
, enz. Er wordt echter een enum-kaart gemaakt met behulp van zijn constructor.
Klonbare en serialiseerbare interfaces
De EnumMap
class implementeert ook Cloneable
en Serializable
interfaces.
Kloonbare interface
Het staat de EnumMap
class om een kopie te maken van instanties van de class.
Serializeerbare interface
Wanneer Java-objecten via een netwerk moeten worden verzonden, moeten objecten worden omgezet in bits of bytes. Dit komt omdat Java-objecten niet via het netwerk kunnen worden verzonden.
De Serializable
interface maakt het mogelijk klassen te serialiseren. Dit betekent objecten van de klassen die Serializable
. implementeren kan worden omgezet in bits of bytes.
Java