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