BE/Java

[JAVA] HashMap과 HashTable의 차이

suhyeon chae 2024. 6. 3. 13:44

 

 

서론

어느날 Youtube에서 강연을 보다가 "hashMap과 hashTable의 차이 다들 잘 알고계시죠~? 면접에도 많이 나오잖아요." 라고 말씀하셨는데 나는 들어만 봤고, 그냥 남들 다 쓰니까 사용했지 정확한 차이같은건 모르고 있었고 알려하지 않았었기에.. 이번 기회에 정리해보려고 한다!

 

Hash(해시)가 뭔데?

먼저 Hash가 뭔지에 대해서 알아보자!

해시(Hash)는 데이터구조와 알고리즘에서 중요한 개념으로, 데이터를 고정된 크기의 해시값으로 매핑하는 함수와 그 결과로 생긴 값을들 효율적으로 저장하고 검색하는 방법이다. 따라서 해시 기반 데이터 저장 구조에서는 데이터 검색과 저장이 매우 빠르게 진행된다.

 

Hash Function(해시함수)가 뭔데?

임의의 크기를 가진 데이터를 고정된 크기의 해시 값(hash value)으로 매핑하는 함수

 

* 다음과 같은 특징을 갖고 있음

 1. 결정성  : 동일한 입력은 항상 동일한 해시 값을 반환

 2. 효율성 : 해시 함수는 빠르게 계산할 수 있음

 3. 균등성 : 입력 값들이 해시 값 공간에 균등하게 분포 

HashTable(해시테이블) 이란?

해시 테이블은 해시 함수를 사용하여 데이터를 저장하고 검색하는 자료구조를 말함

해시 테이블은 배열과 해시 함수를 결합하여 키(key) - 값(value) 쌍을 저장

해시 테이블은 해시 함수를 통해 키(key)를 고정된 길이의 해시값으로 변환하고, 이 해시값을 인덱스로 사용하여 데이터를 저장

 

* 다음과 같은 특징을 갖고 있음

 1. 빠른 검색 속도 : 해시 함수를 통해 키를 해시 값으로 변환하여 배열의 인덱스로 사용하므로 데이터 검색이 매우 빠름

 2. 데이터 확인 용이 : 해시 값을 통해 데이터의 존재 여부를 쉽게 확인할 수 있음

 3. 저장 공간 필요 : 해시 테이블은 배열을 사용하므로 저장 공간이 많이 필요

 4. 해시 충돌 문제 : 서로 다른 키가 동일한 해시 값을 가질 수 있어 충돌이 발생할 수 있음

HashMap(해시맵) 이란?

해시맵은 Java의 Map 인터페이스를 구현한 자료구조를 말함

키-값 쌍으로 데이터를 저장하며, 키(key)의 해시코드를 이용해 빠른 검색 속도를 제공

키(key)는 중복될 수 없지만 값은 중복될 수 있음

 

* 다음과 같은 특징을 갖고 있음

 1. 키-값 저장 : 키(key)와 값(value)의 쌍으로 데이터를 저장

 2. 키 중복 불가 & 값 중복 가능

 3. 해시 함수 사용 : 해시 함수를 사용하여 데이터의 저장 위치를 결정하므로 데이터 추가, 삭제, 검색이 빠름

 4. 순서 보장 안함

 

HashMap VS HashTable

1. 동기화

  - HashMap은 동기화되지 않는다. 여러 쓰레드가 동시에 HashMap을 수행할 경우 데이터의 일관성이 보장되지 않음

  - HashTable은 동기화된다. 멀티스레드 환경에서 사용할 수 있지만 그로 인해 성능이 저하될 수 있다. 모든 메서드는 동기화되어있으므로 여러 스레드가 동시에 접근하는 경우에도 안전함

 

2. Null값과 Null key

  - HashMap은 Null값과 Null key를 허용.

  - HashTable은  Null값과 Null key를 허용하지 않음 (NullPointerException 발생)

 

3. 성능

  - HashMap은 동기화되지 않기 때문에 HashTable보다 성능이 뛰어난다. 단일 스레드 환경에서 사용하기 적합함

  - HashTable은 동기화되기 때문에 성능이 떨어질 수 있음

 

 

* 현대적인 방안

  - ConcurrentHashMap을 사용하여 멀티스레드 환경에서 동시성을 효율적으로 제어

 

  HashMap HashTable
동기화(Synchronization) X O
Null값과 Null key 가능 여부 O X
성능 HashMap이 더 좋음