반응형
일단 이 차이는 다른 언어는 모르겠는데 Java에서는 두 자료구조가 다르다. 그래서 위 제목이 질문으로 들어온다면 Java 기반으로 질문하신거다.
일단 Hash가 무엇인가.
키 → 값을 변환시키는 것을 해싱(Hashing) 이라 한다.
구체적으로 가변길이를 가지는 Input 데이터 → 고정된 길이를 가지는 해시값(Output 데이터) 변환이다.
이렇게 고정된 길이 값을 가지는 해시값은 이제 또 다시 "인덱스화" 되어, 그 해시값과 매칭되는 실제값을 찾아준다.
이런 개념이랄까.
ok. 그러면 해시맵이랑 해시테이블 차이가 뭔가
둘의 가장 큰 차이는 Thread-Safe 유무이다.
해시테이블 같은 경우는 각 데이터 변경 메서드가 동기화 선언이 되어있다.
그래서 메서드 호출을 하면 스레드간 동기화 락이 걸려져 있는 상태라 배타적 실행을 보장한다. 이는 곧 데이터 무결성을 보장해준다는 말이 된다.
근데 해시맵은 동기화 선언이 되어 있지 않아서 멀티 스레드 환경에서 스레드가 데이터에 동시에 접근을 하면 데이터가 깨질 수도 있다.
이 차이와 함께 또 언급되는 것은 NULL의 여부다. 해시테이블은 키가 null이 허용되진 않는다. 하지만 해시맵은 가능하다.
나는 파이썬을 더 많이 썼어서 딕셔너리를 사용했을 때를 떠올리면서 개념을 잡았는데 확실히 Java기반의 질문이 상당히 많다.
반응형
'프로그래밍 > 자료구조' 카테고리의 다른 글
[자료구조] # 2. Set vs Map (0) | 2024.07.17 |
---|---|
[자료구조] # 1. 배열(Array)과 리스트(List)의 차이 (0) | 2024.07.14 |
[자료구조] # 0. 언제 스택을 쓰고, 큐를 써야할까? (0) | 2024.07.03 |