EnumMap
Map 인터페이스 중 key 값으로 enum의 상수 객체만 사용하도록 하는 구현체.
enum은 ordinal이라는 순차적인 정수 값(enum에 명시된 순서)을 가지고 있기 때문에 해싱 작업 없이 내부 데이터를 배열에 저장한다. 해싱 작업이 없기 때문에 성능은 HashMap에 비해 좋다.
생성은 해당 enum의 class 타입을 넘겨줘야한다.
Map<Ranking, Integer> statistics = new EnumMap<>(Ranking.class);
EnumMap과 HashMap의 차이점
- EnumMap은 key값으로 enum의 상수 객체만을 가질 수 있다. HashMap은 키값에 대한 특별한 제한이 없다.
- EnumMap은 내부적으로 배열로 구현되어있고, HashMap은 내부적으로 HashTable로 구현되어있다.
- EnumMap은 내부적으로 배열로 구현되어 있으므로 EnumMap이 HashMap 보다 성능이 좋다.
- EnumMap은 해싱작업을 하지 않으므로 해시 충돌이 없다.
- EnumMap은 키가 순서대로 표시되지만, HashMap은 순서를 보장하지는 못한다.
- HashMap은 일정 이상의 자료가 들어오면 자체적으로 resizing을 하지만 EnumMap은 enum이 가지고있는 상수 객체의 수가 정해져있기 때문에 크기가 변하거나 하지 않는다.
[참고]
[JAVA] EnumMap 을 사용합시다.
5 Difference Between EnumMap And HashMap With Example