Set: EnumSet is a specialized implementation of Set.
1. Use: It is mainly used with enum types.
2. Single enum type: All the elements in an EnumSet must
come from a single enum type when the set is created.
3. Bit vector: Internally, EnumSet is represented as bit
vector.
4. Iterator: The iterator of EnumSet traverses the elements in
their natural order. (It is the order in which the enum
constants are declared).
5. Null: In an EnumSet, null elements are not permitted. If we
try to insert a null element it throws NullPointerException.
6. Thread-safe: EnumSet is not a synchronized collection.
For use in multi-threading scenarios, EnumSet should be
synchronized.
7. Bit flags: EnumSet is a very good alternative to int based
“bit flags” implementation