EnumMap이란
먼저 특징을 살펴보자.
- Enum의 크기만큼 사이즈가 고정된다.
먼저 HashMap의 javadocs를 보면
An instance of HashMap has two parameters that affect its performance: initial capacity and load factor. The capacity is the number of buckets in the hash table, and the initial capacity is simply the capacity at the time the hash table is created. The load factor is a measure of how full the hash table is allowed to get before its capacity is automatically increased. When the number of entries in the hash table exceeds the product of the load factor and the current capacity, the hash table is rehashed (that is, internal data structures are rebuilt) so that the hash table has approximately twice the number of buckets.
이처럼 hashMap의 경우 현재 정해진 용량에서 초과된다면 다시 용량이 설정된다.
만약 key값이 초기용량을 넘어간다면 해시테이블이 동적으로 변할 것이다.
하지만 enumMap은 key로 enum을 가지며 enum의 크기만큼 배열이 미리 생성된다.
때문에 동적으로 size가 변하지않고 고정된다.
-
HashMap보다 빠르다. 물론 Enum을 사용할때 인데 O(1)의 시간복잡도를 가진다고 한다. HashMap과 다르게 Hashing을 거치지않는다. EnumMap은 내부적으로 배열을 사용하고 ordinal()을 사용하여 키를 저장하므로 충돌 가능성이 없지만
HashMap의 경우 해시 충돌이 발생할 수 있으며 이는 성능 하락과 관련이 있다. 또 HashMap은 해시 인덱스에 해당하는 노드 리스트를 검색하지만 EnumMap은 key 인덱스로 바로 접근한다. -
순서가 있다. Enum에 열거한 상태로 Key가 저장되기에 순서가 보장된다.
-
key값으로 Null이 불가능하다. HashMap은 key값으로 null이 가능하지만 EnumMap은 불가능하다.
Map의 key값으로 Enum을 사용한다면 EnumMap을 사용하는 것이 좋을 것 이다.