usadev0813/Daily_CS

HashMap과 HashTable의 차이점에 대해 설명해주세요.

Opened this issue · 0 comments

두 가지 자료구조 모두 자바의 Map 인터페이스를 상속받아 구현되어 데이터를 키와 값으로 관리하는 자료구조이다.

HashMap

  • key와 value에 null을 허용한다.
  • 동기화를 보장하지 않는다.

HashMap은 thread-safe하지 않아, 싱글 쓰레드 환경 에서 사용하는 게 좋다. 한편, 동기화 처리를 하지 않기 때문에 데이터를 탐색하는 속도가 빠르다.

HashTable

  • key와 value에 null을 허용하지 않는다.
  • 동기화를 보장한다.

HashTable은 thread-safe하기 때문에, 멀티 쓰레드 환경에서 사용할 수 있다. 이는 데이터를 다루는 메소드에 synchronized 키워드가 붙어 있다. 해당 키워드는 메소드를 호출하기 전에 쓰레드간 동기화 락을 건다. 그래서 멀티 쓰레드 환경에서도 데이터의 무결성을 부장한다. 그러나, 쓰레드간 동기화락은 매우 느린 동작이라는 단점이 있다.

정리

싱글 스레드 환경에서는 HashMap을 쓰고 멀티 쓰레드 환경이라면 HashTable이 아닌 ConcurrentHashMap을 쓰자ConcurrentHashMap은 Entry에 대해서만 락을 걸어 HashTable보다 데이터를 다루는 속도가 빠르다.
(HashTable은 쓰레드간의 동기화 락을 걸고, ConcurrentHashMap은 Entry, 즉 어떤 값에 락을 검.)