Map

초보개발·2022년 6월 15일
0

JAVA

목록 보기
9/15

interface Map<K, V>

Implementing Classes

Map의 잘 알려진 구현체로는 ConCurrentHashMap, EnumMap, HashMap, Hashtable, TreeMap 등이 있다.

HashMap과 Hashtable

HashMap과 Hashtable의 가장 큰 차이점은 동기화 지원 유무와 null key, null value를 허용하는지 유무이다. HashMap은 동기화를 지원하지 않아 단일 스레드 환경에서 사용하기 좋고 Hashtable은 동기화를 지원하므로 thread-safe하다고 볼 수 있다. 하지만 동기화를 지원하는 만큼 HashMap에 비해 성능이 떨어지는 단점이 있다. 따라서 각자 알맞는 환경에 써야 한다.

  • HashMap: null허용, 저장되는 순서 유지
  • Hashtable: synchronized, thread-safe

Hashtable과 HashMap 성능에 영향을 미치는 두 가지 요소

  • initial capacity: 생성될 때 capacity(버킷의 수)
  • load factor: 해시에 원소가 차 있는 비율

EnumMap

EnumMap은 특정 enum만 key로 갖는 구현체이다. EnumMap은 enum으로 단일 객체임을 보장할 수 있기 때문에 해싱 작업이 필요 없다.(해시 충돌이 발생할 일도 없다) HashMap보다 빠르게 사용할 수 있지만 null값은 허용되지 않는다. 그리고 EnumMap은 enum에 명시되어 있는 순서대로 저장된다. 따라서 EnumMap은 enum에 정의된 상수 개수만큼 키의 개수가 정해져 있어 버킷을 늘릴 필요도 없고
EnumMap은 동기화가 지원되지 않기 때문에 thread-safe하지 않다. 그래서 동기화 처리를 위해 Collections.synchronizedMap(Map<K, V>)으로 감싸주면 된다.

 Map<EnumKey, V> m = Collections.synchronizedMap(new EnumMap<EnumKey, V>(...));

Reference

☕️ Java Docs
🍀 Naver D2

0개의 댓글