본문 바로가기
프로그래밍/자료구조

[자료구조] # 3. HashMap vs HashTable

by Crush on Study 2024. 7. 18.
반응형

일단 이 차이는 다른 언어는 모르겠는데 Java에서는 두 자료구조가 다르다. 그래서 위 제목이 질문으로 들어온다면 Java 기반으로 질문하신거다.

 

일단 Hash가 무엇인가.

키 → 값을 변환시키는 것을 해싱(Hashing) 이라 한다.
구체적으로 가변길이를 가지는 Input 데이터 → 고정된 길이를 가지는 해시값(Output 데이터) 변환이다.

 

이렇게 고정된 길이 값을 가지는 해시값은 이제 또 다시 "인덱스화" 되어, 그 해시값과 매칭되는 실제값을 찾아준다.

출처 : https://mattlee.tistory.com/62

이런 개념이랄까.

 

ok. 그러면 해시맵이랑 해시테이블 차이가 뭔가

 

둘의 가장 큰 차이는 Thread-Safe 유무이다.

 

해시테이블 같은 경우는 각 데이터 변경 메서드가 동기화 선언이 되어있다.

그래서 메서드 호출을 하면 스레드간 동기화 락이 걸려져 있는 상태라 배타적 실행을 보장한다. 이는 곧 데이터 무결성을 보장해준다는 말이 된다.

 

근데 해시맵은 동기화 선언이 되어 있지 않아서 멀티 스레드 환경에서 스레드가 데이터에 동시에 접근을 하면 데이터가 깨질 수도 있다.

 

이 차이와 함께 또 언급되는 것은 NULL의 여부다. 해시테이블은 키가 null이 허용되진 않는다. 하지만 해시맵은 가능하다.

나는 파이썬을 더 많이 썼어서 딕셔너리를 사용했을 때를 떠올리면서 개념을 잡았는데 확실히 Java기반의 질문이 상당히 많다.

반응형