인프런 커뮤니티 질문&답변

kktrkkt님의 프로필 이미지
kktrkkt

작성한 질문수

이펙티브 자바 완벽 공략 1부

아이템 1. 완벽 공략 1 - 열거 타입

[과제] EnumMap과 EnumSet가 HashMap과 HashSet보다 효율적인 이유

작성

·

364

0

EnumMap 특징
- 열거형 크기만큼 배열이 생겨나며, ordinal에 따라 index가 정해진다.
- 배열을 사용하기 때문에 연산속도가 빠르다.
- 열거형 순서에 따라 데이터가 정렬된다.
- 키의 순서대로 순회할 때 효율적이다.
EnumSet 특징
- 비트 벡터를 통해 공간과 성능을 최적화한다.
- 다양한 집합 연산(교집합, 차집합, 합집합 등)을 제공한다.

* 비트 벡터란 비트 배열로 구성된 자료구조, 0이면 집합에 미포함, 1이면 집합에 포함을 의미한다

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

kktrkkt님, EnumMapEnumSet의 주요 특성을 잘 정리해주셨습니다. 그리고 언급하신 바와 같이, 이들이 HashMapHashSet보다 특정 상황에서 더 효율적인 이유를 추가로 설명드리겠습니다.

EnumMap은 열거형 키를 사용할 때, 배열 인덱스를 바탕으로 매우 빠른 접근이 가능하므로 검색과 삽입 작업에서 HashMap보다 성능이 더 뛰어납니다. 내부적으로 배열을 사용하기 때문에 키가 열거형 값이라는 것을 이미 알고 있으므로 키를 해싱할 필요가 없고, 충돌을 처리할 필요도 없습니다. 또한 키가 열거형이므로 순회 순서가 상수 단위로 일정하여, 키를 순서대로 순회할 때 효율적입니다.

EnumSet은 내부적으로 비트 벡터를 사용하여 열거형 상수들을 표현합니다. 이는 각 비트가 열거형 상수의 존재를 나타내는 방식으로, 해시 기반의 HashSet에 비해 공간을 현저히 적게 사용하며 집합 연산이 매우 빠르다는 장점이 있습니다. 비트 연산을 통해 교집합, 합집합, 차집합 등의 연산을 효율적으로 수행할 수 있습니다.

따라서 열거형 키를 사용하는 맵이 필요하거나, 열거형을 요소로 하는 집합이 필요할 경우 HashMapHashSet 대신 EnumMapEnumSet을 사용하는 것이 성능상 이점이 있을 수 있습니다.

kktrkkt님의 프로필 이미지
kktrkkt

작성한 질문수

질문하기