What is EnumSet in Java?
- In Java, an EnumSet could be a specialized Set usage for use with Java enums.
- It provides a highly profitable method of storing and managing a collection of enum constants and is a component of the java.util package.
- Not at all like regular sets, which can hold any type of objects, an EnumSet is especially arranged to work with enum types, giving improved performance and a more instinctive API when managing with enum values.
- EnumSet is one of the various usage of the Set interface, but it is particularly optimized for circumstances where the components of the set are enums.
- This distinguishes it from more general-purpose sets like HashSet or TreeSet, which may store any form of data.
- The key advantage of EnumSet is its speed and memory capability since it internally uses bit vectors to speak to enum constants.
Types of EnumSet in Java
Java gives a few ways to make and utilize EnumSet. Below are the common types and methods of making EnumSet:
1.All-of EnumSet:
- The EnumSet.allOf() method makes an EnumSet that contains all of the enum constants from the desired enum class.
- Example:
public enum Day { MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY }
EnumSet<Day> allDays = EnumSet.allOf(Day.class);
System.out.println(allDays); //Output: [MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY]
2.None-of EnumSet:
- The EnumSet.noneOf() method makes an empty EnumSet of the required enum type. It can be valuable once you need to begin with an empty set and add components afterward.
- Example:
EnumSet<Day> noDays = EnumSet.noneOf(Day.class);
System.out.println(noDays); //Output: []
3.Range EnumSet:
- The EnumSet.range() method makes an EnumSet that contains a particular range of enum constants. You give the beginning and finishing values of the range.
- Example:
EnumSet<Day> weekend = EnumSet.range(Day.SATURDAY, Day.SUNDAY);
System.out.println(weekend); //Output: [SATURDAY,SUNDAY]
4.Of EnumSet:
- The EnumSet.of() method makes an EnumSet with a indicated set of enum constants. This method can acknowledge a variable number of enum constants as arguments.
- Example:
EnumSet<Day> weekdays = EnumSet.of(Day.MONDAY, Day.TUESDAY, Day.WEDNESDAY);
System.out.println(weekdays); //Output: [MONDAY,TUESDAY,WEDNESDAY]

Advantages of Using EnumSet in Java
1.Performance:
- EnumSet is actualized utilizing bitwise operations and is basically faster than other set executions like HashSet when managing with enum types.
- Ordinarily since each enum consistent compares to a bit in an inner bit vector, making operations like add(), remove(), and contains() exceptionally viable.
2.Memory Efficiency:
- Since EnumSet uses a bit vector to store the enum constants, it is more memory-efficient compared to other Set utilization, which might require objects to store the enum values.
3.Type Safety:
- EnumSet gives type security by guaranteeing that because it were enum constants of the required enum type can be added to the set.
4.Convenient Methods:
- Java gives a few utility methods for controlling EnumSet, such as addAll(), removeAll(), retainAll(), and more.
- These methods are exceptionally supportive when working with sets of enum values.
Example Usage
Consider an example where you need to demonstrate a basic traffic light system. You’ll utilize EnumSet to speak to the active and inactive states of the traffic light.
public enum TrafficLight { RED, YELLOW, GREEN }
public class TrafficLightSystem {
public static void main(String[] args) {
EnumSet<TrafficLight> activeLights = EnumSet.of(TrafficLight.RED, TrafficLight.GREEN);
System.out.println("Active Lights: " + activeLights); // Output: Active Lights: [RED, GREEN]
// Adding a new light
activeLights.add(TrafficLight.YELLOW);
System.out.println("Active Lights after addition: " + activeLights); // Output: Active Lights: [RED, GREEN, YELLOW]
// Removing a light
activeLights.remove(TrafficLight.GREEN);
System.out.println("Active Lights after removal: " + activeLights); // Output: Active Lights: [RED, YELLOW]
}
}
Within the above example, we used EnumSet to manage the active states of the traffic light, taking advantage of the set operations like add() and remove().
Conclusion
- EnumSet is a capable and proficient collection planned for utilize with enums.
- Its main advantages are speed and memory efficiency, which make it a great choice after you got to work with enums in sets.
- By utilizing methods like allOf(), noneOf(), range(), and of(), Java developers can effectively manage sets of enum constants.
- Whether you’re managing state in a system or basically require a specialized set implementation, EnumSet gives a type-safe and performant arrangement.