Tässä opetusohjelmassa opitaan Java EnumMap -luokasta ja sen toiminnoista esimerkkien avulla.
EnumMap
Luokka Java kokoelmien kehys tarjoaa kartan toteutuksen elementtejä ENUM.
Sisään EnumMap
enum-elementtejä käytetään avaimina . Se toteuttaa Map-käyttöliittymän.
Ennen kuin opimme EnumMap
, muista tietää Java Enums.
EnumMap-kartan luominen
Enum-kartan luomiseksi meidän on java.util.EnumMap
ensin tuotava paketti. Kun paketti on tuotu, voimme näin luoda enum-karttoja Javassa.
enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) EnumMap sizes = new EnumMap(Size.class);
Yllä olevassa esimerkissä olemme luoneet enum-kartan, jonka nimet ovat kokoja.
Tässä,
- Koko - arvot yhdistävän numeronäppäimet
- Kokonaisluku - vastaaviin näppäimiin liittyvä laskentakartan arvot
EnumMap-menetelmät
EnumMap
Luokan tarjoaa menetelmiä, joiden avulla voimme tehdä erilaisia elementtejä ENUM karttoihin.
Lisää elementit EnumMapiin
put()
- lisää määritetyn avaimen / arvon kartoituksen (merkinnän) luetteloonputAll()
- lisää kaikki määritetyn kartan merkinnät tähän karttaan
Esimerkiksi,
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); ) )
Tuotos
EnumMap1: (Pieni = 28, KESKI = 32) EnumMap2: (Pieni = 28, KESKI = 32, SUURI = 36)
Yllä olevassa esimerkissä olemme käyttäneet putAll()
menetelmää kaikkien enum-karttakokojen1 elementtien lisäämiseksi koot2-karttaan.
On myös mahdollista lisätä elementtejä muista karttoja kuten HashMap
, TreeMap
jne ENUM kartan avulla putAll()
. Kaikkien karttojen tulisi kuitenkin olla samantyyppisiä.
Avaa EnumMap Elements
1. Käyttämällä entrySet (), keySet () ja arvoja ()
entrySet()
- palauttaa joukon kaikkia näppäinyhdistelmäkartan näppäimiä / arvoja (merkintä)keySet()
- palauttaa joukon kaikkia enum-kartan näppäimiävalues()
- palauttaa joukon kaikkia arvokartan arvoja
Esimerkiksi,
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()); ) )
Tuotos
EnumMap: (PIENI = 28, KESKI = 32, SUURI = 36, YLITTÄIN = 40) Avaimen / arvon määritykset: (Pieni = 28, KESKI = 32, SUURI = 36, ULKONAINEN = 40) Avaimet: (Pieni, Keskikokoinen, Suuri, EXTRALARGE) Arvot: (28, 32, 36, 40)
2. Käytä get () -menetelmää
get()
Menetelmä palauttaa liittyvän arvon määriteltyjen avaimen. Se palauttaa, null
jos määritettyä avainta ei löydy.
Esimerkiksi,
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); ) )
Tuotos
EnumMap: (PIENI = 28, KESKI = 32, SUURI = 36, YLIMITTÄINEN = 40) KESKISARVO arvo: 32
Poista EnumMap Elements
remove(key)
- palauttaa ja poistaa määritettyyn avaimeen liittyvän merkinnän kartaltaremove(key, value)
- poistaa merkinnän kartalta vain, jos määritetty avain on yhdistetty määritettyyn arvoon ja palauttaa loogisen arvon
Esimerkiksi,
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); ) )
Tuotos
EnumMap: (Pieni = 28, KESKI = 32, SUURI = 36, YLITTÄINEN = 40) Poistettu arvo: 32 Onko merkintä (Pieni = 28) poistettu? Todellinen päivitetty EnumMap: (LARGE = 36, EXTRALARGE = 40)
Vaihda EnumMap Elements
replace(key, value)
- korvaa määritettyyn avaimeen liittyvän arvon uudella arvollareplace(key, old, new)
- korvaa vanhan arvon uudella vain, jos vanha arvo on jo liitetty määritettyyn avaimeenreplaceAll(function)
- korvaa jokaisen kartan arvon määritetyn toiminnon tuloksella
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); ) )
Tuotos
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
Käyttöliittymän avulla luokat sarjoitettava. Tämä tarkoittaa, että toteutettavien luokkien objektit Serializable
voidaan muuntaa bitteiksi tai tavuiksi.