inflearn logo
강의

Course

Instructor

Effective Java Complete Guide Part 1

Item 1. Complete Guide 1 - Enum Type

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

543

kktrkkt

7 asked

0

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

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

java

Answer 1

0

communityai8509

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

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

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

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

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

JAR파일 dependency 관련하여 질문드립니다.

0

229

2

선생님 작성한 정적 팩토리 메서드에 대해 의견 주실 수 있으실까요??

0

306

2

책에 쓰여 있는 스레드 안전에 대한 제 생각

0

295

2

프로젝트 설정 관련 질문

0

753

1

브릿지 패턴과 서비스 제공자 프레임워크 관계

0

280

1

정적팩토리메소드와 ServiceLoader는 무슨 관계인가요?

0

346

1

강의 제목 오타 발견!!! 뚜둥

0

283

1

mvn install

1

458

1

강의 코드

0

486

2

Builder 필수값 질문입니다.

0

1044

1

Elvis, IElvis 질문이 있습니다.

0

478

1

EnumMap, EnumSet 정리

0

1003

1

HelloService 구현체

0

407

1

[과제] 강의 너무 만족스럽습니다.

0

716

1

PhantomReference 가 소멸되는 시점을 보는 코드 부분이 약간 이상한것 같습니다.

1

545

2

안녕하세요

2

682

1

객체 소멸에 관한 질문

0

544

0

정적 팩토리 메서드에 대해 질문이 있습니다.

0

542

0

Mock test 관련 질문입니다!

0

530

1

안녕하세요 선생님, 강의를 보고나서 Optional 소스코드를 뜯어보다가 어려운 부분이 있어서 질문 드립니다.

2

522

2

기선님 질문있습니다..

0

381

1

intellij의 equals 자동 생성 기능

1

521

1

Builder에 default값 추가하기

0

304

1

[과제] EnumMap, EnumSet

8

882

1