HashMap과 HashTable

동기화가 필요없다면 해시맵을,
동기화 보장이 필요하다면 해시테이블을!

 

 

차이점

동기화 Synchronization

HashMap의 경우 동기화를 지원하지 않는다. 

반면 다중 스레드 환경에서 HashTable은 동기화를 지원하기 때문에 실행 환경에 따라 구분하여 사용하면 된다.

* vector의 상위 호환 개념인 ArrayList의 사용을 권장하듯, 새로운 버전인 HashMap을 주로 사용하고 동기화가 필요하면 ConcurrentHashMap을 사용하는 것이 더 좋은 방법이라고 한다. 구형인 HashTable은 동기화 처리라는 비용때문에 HashMap에 비해 느리다. 

 

 

Thread-safe 여부

Hashtable은 Thread-safe하고, HashMap은 Thread-safe하지 않다.

따라서 멀티스레드 환경이 아니라면 Hashtable은 HashMap 보다 성능이 떨어진다.

 

 

Null 값 허용 여부

Hashtable은 key에 null을 허용하지 않지만, HashMap은 key에 null을 허용한다.

 

 

Enumeration 여부 

HashMap은 저장된 요소들의 순회를 위해 Fail-Fast Iterator를 반환한다.(ConcurrentHashMap의 경우에는 Fail-Safe Iterator)

Hashtable은 같은 경우 Enumeration을 반환한다.

* Fail-Fast Iterator : 말 그대로 빠른 에러를 발생시켜 버그를 예방할 수 있다.

반면에 Enumeration를 사용한 코드는 중간에 remove를 해도 예외가 발생하지 않는다. 그렇기 때문에 나중에 버그를 발견하지 못할 확률도 존재한다.

 

 

보조 해시 사용

HashMap은 보조해시를 사용하기 때문에 보조 해시 함수를 사용하지 않는 Hashtable에 비하여 해시 충돌(hash collision)이 덜 발생할 수 있어 상대적으로 성능상 이점이 있다.

 


<참고>

https://odol87.tistory.com/3 https://devlog-wjdrbs96.tistory.com/253 https://12216715011126.tistory.com/53

'🔥 > JAVA' 카테고리의 다른 글

[JAVA] JVM 동작 원리 및 기본 개념  (0) 2021.12.11
[JAVA] 객체 지향 프로그래밍(OOP)이란?  (0) 2021.08.11
[JAVA] 자바가상머신, JVM이란?  (0) 2021.08.11
[JAVA] Hash란?  (0) 2021.08.04

+ Recent posts