Hashmap, Hashtable, 그리고 ConcurrentHashMap은 모두 Map 인터페이스를 상속받습니다.
Key - Value 자료구조에 해싱을 사용하여 검색 속도가 O(1) 수준으로 빠른 것이 장점입니다.
본 글에서는 각 자료구조의 차이점에 대해 자세히 알아보려고 합니다.
Hashmap은 동기화를 지원하지 않습니다. 따라서 단일 스레드 환경에서 적합합니다.
동기화를 지원합니다. 다만 동기화 처리 비용으로 인해 Hashmap 보다는 속도가 느린 편입니다.
모든 메서드에 synchronized가 걸려있습니다.
읽기에는 synchronized가 걸려있지 않아 여러 쓰레드가 동시에 읽을 수 있습니다.
쓰기 작업에는 synchronized가 걸려 있습니다.
쓰기 작업 또한 세그먼트 단위로 락이 잡히기 때문에 병목현상 발생 위험을 줄일 수 있다.
초기에는 Seperate Chaining 방식을 사용
Chain이 일정 값 (Threshold) 이상으로 커지면
해시 함수의 균등 분포 성능이 높아짐에 따라 JDK 1.8부터는 상위 16비트 값을 XOR 연산하는 매우 단순한 형태의 보조 함수로 변경되었다고 합니다.
참고 자료 : adam2님의 자료구조해시-테이블 포스팅