In this article, you will learn-
Java EnumSet
In this tutorial, we will learn about the Java EnumSet class and its different methods with the help of examples.
The EnumSet class of the Java collections system gives a set usage of components of a single enum.
Before you learn about EnumSet, make sure to know about Java Enums.
It implements the Set interface.
Making EnumSet
To make an enum set, we should import the java.util.EnumSet package first.
Unlike to other set executions, the enum set doesn’t have public constructors. We should utilize the predefined techniques to make an enum set.
1. Using allOf(Size)
The allof() method creates an enum set that contains all the values of the specified enum type Size. For example,
import java.util.EnumSet;
class Main {
// an enum named Size
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using allOf()
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
System.out.println("EnumSet: " + sizes);
}
}
Output
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]
Notice the statement,
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
Here, Size.class denotes the Size enum that we have created.
2. Using noneOf(Size)
The noneOf() method creates an empty enum set. For example,
import java.util.EnumSet;
class Main {
// an enum type Size
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using noneOf()
EnumSet<Size> sizes = EnumSet.noneOf(Size.class);
System.out.println("Empty EnumSet: " + sizes);
}
}
Output
Empty EnumSet : []
Here, we have created an empty enum named sizes.
Note: We can only insert elements of enum type Size in the above program. It’s because we created our empty enum set using Size enum.
3. Using range(e1, e2) Method
The range() method makes an enum set containing all the values of an enum somewhere in the range of e1 and e2 including the two qualities. For instance,
import java.util.EnumSet;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using range()
EnumSet<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE);
System.out.println("EnumSet: " + sizes);
}
}
Output
EnumSet: [MEDIUM, LARGE, EXTRALARGE]
4. Using of() Method
The of() method makes an enum set containing the predefined components. For instance,
import java.util.EnumSet;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Using of() with a single parameter
EnumSet<Size> sizes1 = EnumSet.of(Size.MEDIUM);
System.out.println("EnumSet1: " + sizes1);
EnumSet<Size> sizes2 = EnumSet.of(Size.SMALL, Size.LARGE);
System.out.println("EnumSet2: " + sizes2);
}
}
Output
EnumSet1: [MEDIUM]
EnumSet2: [SMALL, LARGE]
Methods of EnumSet
The EnumSet class provides methods that allow us to perform various elements on the enum set.
Insert Elements to EnumSet
- add() – inserts specified enum values to the enum set
- addAll() inserts all the elements of the specified collection to the set
For example,
import java.util.EnumSet;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using allOf()
EnumSet<Size> sizes1 = EnumSet.allOf(Size.class);
// Creating an EnumSet using noneOf()
EnumSet<Size> sizes2 = EnumSet.noneOf(Size.class);
// Using add method
sizes2.add(Size.MEDIUM);
System.out.println("EnumSet Using add(): " + sizes2);
// Using addAll() method
sizes2.addAll(sizes1);
System.out.println("EnumSet Using addAll(): " + sizes2);
}
}
Output
EnumSet using add(): [MEDIUM]
EnumSet using addAll(): [SMALL, MEDIUM, LARGE, EXTRALARGE]
In the above example, we have used the addAll() strategy to insert all the components of an enum set sizes1 to an enum set sizes2.
It’s likewise conceivable to insert components from different assortments, for example, ArrayList, LinkedList, and so on to an enum set using addAll(). However, all assortments ought to be of the equivalent enum type.
Access EnumSet Elements
To get to components of an enum set, we can use the iterator() method. To use this strategy, we should import the java.util.Iterator package. For instance,
import java.util.EnumSet;
import java.util.Iterator;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using allOf()
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
Iterator<Size> iterate = sizes.iterator();
System.out.print("EnumSet: ");
while(iterate.hasNext()) {
System.out.print(iterate.next());
System.out.print(", ");
}
}
}
Output
EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,
Note:
- hasNext() returns true if there is a next element in the enum set
- next() returns the next element in the enum set
Remove EnumSet Elements
- remove() – removes the specified element from the enum set
- removeAll() – removes all the elements from the enum set
For example,
import java.util.EnumSet;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating EnumSet using allOf()
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
System.out.println("EnumSet: " + sizes);
// Using remove()
boolean value1 = sizes.remove(Size.MEDIUM);
System.out.println("Is MEDIUM removed? " + value1);
// Using removeAll()
boolean value2 = sizes.removeAll(sizes);
System.out.println("Are all elements removed? " + value2);
}
}
Output
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]
Is MEDIUM removed? true
Are all elements removed? true
Other Methods
Method | Description |
copyOf() | Creates a copy of the EnumSet |
contains() | Searches the EnumSet for the specified element and returns a boolean result |
isEmpty() | Checks if the EnumSet is empty |
size() | Returns the size of the EnumSet |
clear() | Removes all the elements from the EnumSet |
Clonable and Serializable Interfaces
The EnumSet class also implements Cloneable and Serializable interfaces.
Cloneable Interface
It allows the EnumSet class to make a copy of instances of the class.
Serializable Interface
At whatever point Java objects should be transmitted over a network, objects should be changed over into bits or bytes. This is on the grounds that Java objects can’t be transmitted over the network.
The Serializable interface allows classes to be serialized. This implies objects of the classes executing Serializable can be changed over into bits or bytes.
Why EnumSet?
The EnumSet gives a proficient method to store enum values than other set executions (like HashSet, TreeSet).
An enum set just stores enum values of a particular enum. Subsequently, the JVM definitely knows all the potential values of the set.
This is the reason why enum sets are inside executed as a succession of bits. Bits determine if components are available in the enum set or not.
The bit of a comparing component is turned on if that component is available in the set.
Thanks for reading! We hope you found this tutorial helpful and we would love to hear your feedback in the Comments section below. And show us what you’ve learned by sharing your photos and creative projects with us.