EnumSet
EnumSet (enum 전용 Set)
enum 타입과 함께 사용하도록 특화된 Set 구현이에요. enum 집합의 모든 요소는 집합 생성 시 명시적 또는 암시적으로 지정된 단일 enum 타입에서 와야 해요.
본문
enum 집합은 내부적으로 비트 벡터로 표현돼요. 이 표현은 매우 컴팩트하고 효율적이에요. 공간·시간 성능이 좋아서 전통적인 int 기반 "비트 플래그"의 타입 안전한 고품질 대안으로 쓸 수 있어요. 모든 기본 연산이 일정 시간에 실행되며 HashSet보다 훨씬 빠를 가능성이 높아요.
containsAll이나 retainAll 같은 일괄 연산도 인자가 enum 집합이면 매우 빠르게 실행돼요.
iterator 메서드가 반환하는 반복자는 요소를 자연 순서(enum 상수가 선언된 순서)로 순회해요. 반환된 반복자는 약하게 일관적이라 ConcurrentModificationException을 절대 던지지 않아요.
null 요소는 허용되지 않아요. null 요소를 삽입하려 하면 NullPointerException이 던져져요. 다만 null 요소의 존재 여부 검사나 제거는 정상 동작해요.
대부분의 컬렉션 구현처럼 EnumSet은 동기화되지 않아요. 여러 쓰레드가 동시에 접근하고 적어도 하나가 집합을 수정한다면 외부에서 동기화해야 해요.
Set<MyEnum> s = Collections.synchronizedSet(EnumSet.noneOf(MyEnum.class));
EnumSet<Day> weekend = EnumSet.of(Day.SATURDAY, Day.SUNDAY);
이 클래스는 Java Collections Framework의 구성원이에요. 코드와 시그니처는 원문 그대로 보존돼요.