본문 바로가기

JAVA/기본

HashMap 과 HashTable 의 차이점

java.util.Map 의 구현체인 HashMap, HashTable 은 사용방법도 비슷하고 용도도 비슷합니다.

즉  Key object - Value object 를 쌍으로 저장하여 seek타임을 줄이기 위해 hash값을 이용합니다.

그럼 뭐가 다를까요?

 

1. Thread Safety

둘의 가장 큰 차이점은 Thread Safety 입니다.

  • HashMap 의 경우 synchronized 가 되어 있지 않아서 멀티 스레드 환경에서는 사용해서는 안됩니다. 그대신 빠르죠.
  • 반대로 HashTable 은 Thread-safe 하지만 (당연히) 속도가 느립니다.

둘중에 무엇을 사용해야 하는지를 결정하는 가장 중요한 요소는 “Thread safe가 필요한가?” 입니다.

즉 멀티 쓰레드 환경이 아니면 HashMap을 쓰면 속도가 빠르다는 말입니다.

굳이 동기화 하자면 다음과 같이 사용합니다.

Map m = Collections.synchronizedMap(new HashMap(...));
참고로 요새는 ConcurrentHashMap을 쓰고 HashTable 은 쓰지 않습니다. ConcurrentHashMap은 thread safety 를 제공하면서도 HashTable 보다 확장성이 좋습니다.

2. null

 

스타 유닛들의 공격력을 HashMap에 담아 보겠습니다. 메딕은 공격력이 없으니 null, 그리고 유닛이 null 이면 공격력도 0 입니다. HashMap은 위와 같이 key, value 모두 null 값을 허용합니다.

 

Hashtable은 키나 값에 Null을 허용하지 않습니다.

코드에 써 있다시피 NullPointerException이 발생합니다.

 

 

 

출처 : By | September 12, 2013   http://blog.dkinvade.com/?p=141