본문 바로가기

Programming/Java

HashMap VS HashTable VS ConcurrentHashMap

 자바는 지원하는 Collection이 상당히 많다.

그리고 비슷한 컬렉션이 많다. 그 중 HashMap 과 HashTable 

그리고 자바 1.7 버전이 나오면서 ConcurrentHashMap라는 새로나온 컬렉션이 있다.

이 컬렉션들은 모두 <Key,Value>로 데이터를 처리한다.

그럼 이 Collection들은 무슨 차이가 있을까??


1. HashMap VS HashTable  

 - 두 컬렉션 모두 Map을 Implement하고 있어서 많은 차이는 없지만, 가장 큰 차이는 동기화의 문제이다. HashTable은 모든 Data변경 메소드에 syncronized가 선언 되어있다.

즉, 멀티스레드 환경에서 데이터 무결성을 보장 해주는 것이다. 이 때문에 HashTable은 데이터의 변동시 락을 걸기 때문에 느리다.

반면 HashMap은 HashTable에 비하여 빠르지만, 멀티스레드 환경에서 데이터의 무결성을 보장하지 못할 수 있다는 단점이 있다.


2. ConcurrentHashMap

- 새로나온 ConcurrentHashMap은 훌륭하다. 멀티 스레드 환경에서 Map전체에 락을 걸지 않고 여러개의 세그먼트로 쪼개서 락을 걸기 때문에 스레드간의 

경쟁이 적은 편이다. 


PS. TreeMap이라는 Map도 있는데 자료구조에 Tree를 생각하면 된다. Hash가 빠르지만 Tree는 인덱스를 가질 수 있어서데이터를 sort하기에 좋은 자료구조 이다. 




'Programming > Java' 카테고리의 다른 글

JVM(JavaVirtualMachine)  (0) 2016.08.08
Lambda  (0) 2016.08.04
Generics  (0) 2016.06.16