본문 바로가기
IT/Java

HashTable, HashMap, ConcurrentHashMap 비교

by 성준하이 2022. 10. 4.
반응형

이전 포스팅에서 Map에 대해서 다룬적은 있다.

자세한 내용은 아래 참고 포스팅을 확인해보길 추천한다.

 

이번 포스팅에서는 Hash 관련해서 HashTable, HashMap, ConcurrentHashMap 세개를 얘기해볼 것이다.

 

먼저 셋의 공통점은 Map 인터페이스를 구현한 콜렉션들이고, 이 콜렉션들은 비슷한 역할을 하는것 같으면서도 다르게 구현되어 있다.

기본적으로 Map 인터페이스를 구축한다면 Key/Value 구조를 갖게 된다.

 

HashTable

HashTable은 put,get 과 같은 주요 메서드에 synchronized 키워드가 선언되어 있고, KeyValue에 null을 허용하지 않는다.

HashMap

HashMap은 주요 메서드에 synchronized 키워드가 포함되어있지 않으며, KeyValue에 null이 허용 가능하다.

ConcurrentHashMap

HashMap을 thread-safe 하도록 만든 클래스가 ConcurrentHashMap입니다. 하지만 HashMap과는 다르게 key, value에 null을 허용하지 않습니다. 또한 putIfAbsent라는 메소드를 가지고 있습니다. 해당 부분은 아래 코드의 주석을 참고하시기 바랍니다.

 

HashMap을 thread-safe 하도록 만든 클래스가 이 ConcurrentHashMap이다.

  • thread-safe란 여러 스레드에서 동작을 해도 변수, 함수등에서 문제가 없다는 것을 의미한다.
    예를들어 글로벌 변수로 지정이 되어서 여러 스레드를 통해서 계속해서 값이 바뀌는 값을 가진 변수가 있는 함수는 thread safe 하지 않다고 할수 있다.

이 ConcurrentHashMap은 일반적인 HashMap과는 다르게 KeyValue 에 null을 허용하지 않는다.

그리고 추가적으로 putIfAbsent라는 메서드를 갖고 있다.

 

 

정리를 좀 하면

일단 HashMap과 HashTable에서는 서로 synchronized 와 null의 유무 차이 이다.

Table에서는 null을 허용 하지 않고, synchronized가 선언 되어있다.

그래서 HashTable의 성능이 좀더 느리다.

그럼 HashMap에서 synchronized를 사용하기 위해서는 synchronizedMap이라는 Collections 에 있는 객체를 사용하면 된다.

또다른 방법으로는 마지막에 설명한 ConcurrentHashMap 를 사용하는 방법이 있다.


참고 포스팅

https://thenicesj.tistory.com/282

 

Map, Set, List 에 대해서

이번 포스팅에서는 자바에서 arraylist나 배열 말고 값을 저장할수 있는 또 다른 형태인 map, set, list 에 대해 다뤄보려고 한다. 구조는 다음과 같다. 먼저 각각에 대해 알아보면 list 순서와 중복이

thenicesj.tistory.com

 

반응형

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

Error creating bean with name 'entityManagerFactory'  (28) 2022.10.22
Maven 사용법  (55) 2022.10.05
Quartz 스케줄러 part.2  (36) 2022.10.03
Quartz 스케줄러 part.1  (34) 2022.10.02
PSA 란?  (54) 2022.09.28

댓글