What is an EnumMap in Java?
Tags: java, programming
Published: 2022-02-21 10:19:01

Some days ago, I bumped into an error on Intellij. I don't remember specifically what it was. But I remember Intellij suggesting I use an "enumMap".

I knew about the existence of enums, but I wasn't aware of the existence of enumMaps.

So here is an article covering enumMaps, in Java.

### **What is an EnumMap?**

An EnumMap is a special form of a map. A map in Java is an interface that takes a key (K) and a value (V).

In the case of an EnumMap, the key is an enum. 

An EnumMap:

- extends the AbstractMap.

- implements Map interface.

### **How to create an EnumMap**

To create an enumMap, we have to import the `java.util.EnumMap`

```
public class JavaEnumMap {

    enum Colour {
        RED,
        BLUE,
        BLACK,
        GREEN
    }
}
```
### **How to add an element into an enumMap**

You can use the *put()* method to insert elements into an enumMap.

```
    public static void main(String[] args) {

        EnumMap<Colour, Integer> colours = new EnumMap<Colour, Integer>(Colour.class);

        colours.put(Colour.RED, 1);
        colours.put(Colour.BLUE, 2);
        colours.put(Colour.BLACK, 3);
        colours.put(Colour.GREEN, 4);
}
```
### **How to access an element on an enumMap**

To access the elements of an enumMap, you can use:

*keySet()*

It prints all the keys on the map

```
System.out.println("Printing all keys in the map " + colours.keySet());
```

The result is:

```
Printing all keys in the map [RED, BLUE, BLACK, GREEN]
```

*entrySet()*

It prints the keys and the values in the map

```
System.out.println("Printing the keys and the values in the map " + colours.entrySet());
```
The result is:

```
Printing the keys and the values in the map [RED=1, BLUE=2, BLACK=3, GREEN=4]
```

*values()*

It prints the values in the map


```
System.out.println("Printing the values in the map " + colours.values());
```

The result is:

```
Printing the values in the map [1, 2, 3, 4]
```

### **How to retrieve elements from an enumMap**

You can use the *get()* method to retrieve elements from an enumMap.

```
System.out.println("Retrieve the value from the enumMap " + colours.get(Colour.RED));
```

The result is:

```
Retrieve the value from the enumMap: 1
```

### **How to remove elements from an enumMap**

To remove elements from an enumMap you can use:

*remove(key)*
 
You use the key of the enumMap to remove an element from an enumMap

```
System.out.println("Removing the key: " + colours.remove(Colour.GREEN));
```

The result is:

```
Removing the key: 4
The enumMap now has: {RED=1, BLUE=2}
```

*remove(key, value) *

If it exists, it removes the element from the enumMap and returns a boolean value.

```
System.out.println("Removing the key and the value from the enumMap: " + colours.remove(Colour.BLACK, 3));
Removing the key and the value from the enumMap: true
The enumMap now has: {RED=1, BLUE=2}
```
The result is:

```
The enumMap now has: {RED=1, BLUE=2}
```

### **How to replace an enumMap**

*replace(key, value)*

It replaces the old value with a new value.

```
colours.replace(Colour.RED, 5);

System.out.println("The new enum now has: " + colours);
```

Result is:

```
The new enum now has: {RED=5, BLUE=2}
```

*replace (key, oldValue, newValue)*

This method replaces the old value with a new one only if the old value is linked with a specific key.

```
colours.replace(Colour.BLUE, 2, 4);

         System.out.println("The new enum now has: " + colours);
```
The result is:

```
The new enum now has: {RED=5, BLUE=4}
```

*replaceAll()*

It replaces the value of each element with the result of the function.

```
      colours.replaceAll((key, oldValue) -> oldValue + 7);

        System.out.println("EnumMap using replaceAll(): " + colours);
```

The result is:

```
EnumMap using replaceAll(): {RED=12, BLUE=11}
```

A few notes about enumMaps:

- EnumMaps maintain the natural order of their keys.

- We cannot have *null* keys.

- Internally, enumMaps are represented as *arrays*.

**CONCLUSION**

In this article, you've learned about enumMaps and its methods.

I hope you've found this article helpful.

If you enjoy my writing, please consider subscribing to my newsletter.

I'm also on [LinkedIn](https://www.linkedin.com/in/maddalena-o-bb2372020/) and [Twitter](https://twitter.com/Maddy_Onyehara).

Until next time! 🙋🏾‍♀️

***ADDITIONAL RESOURCES***

- [JavaDoc: EnumMap](https://docs.oracle.com/javase/7/docs/api/java/util/EnumMap.html)

- [Baeldung: A Guide to EnamMap](https://www.baeldung.com/java-enum-map)

- [Ritesh Panigrahi: Complete Guide to Java Enum](https://riteshpanigrahi.hashnode.dev/complete-guide-to-java-enum)