본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/JAVA

[Java] HashMap Hashtable 차이점, 구분하기

by 미노드 2023. 12. 30.

1. Hash란?

해시(Hash)란 단방향 암호화 기법인 해시함수(HashFunction)을 이용하여 생성된 고정된 길이의 비트열을 의미합니다.
Hash function, 해시 함수 (짧게는 해시 라고도 부름)는 임의의 길이를 갖는 임의의 데이터를 고정된 길이의 데이터로 매핑하는 단방향 함수를 의미합니다.

다른말로 표현하자면, 아무리 큰 숫자를 넣더라도 정해진 크기의 숫자가 나오는 함수입니다.
예를 들면 어떤 숫자를 10으로 나누었을 때 그 나머지를 구하는 함수도 해시 함수입니다.
(나머지가 0~9 까지 한자리의 크기로 출력되기 때문)


이러한 해시 함수를 적용하여 나온 고정된 길이의 값을 해시값, 해시 코드, 해시섬(sum) 등으로 부릅니다.

해시 함수는 보통 입력의 범위(정의역)보다 출력값의 범위(치역)가 작으므로 서로 다른 입력값에도 동일한 값이 출력되는 경우도 존재합니다.
출력값이 하나일때 입력값이 하나 이상일 수 있는데, 이러한 경우를 '충돌'이라고 하며, 이처럼 출력값이 하나인 것에 대해 입력값을 찾기 힘든 것이 해시함수의 특징입니다.

Hash를 이해했으니, HashMap과 HashTable을 이해해봅시다.

2. HashMap
3. HashTable

이 두개는 공통점이 있는 자료구조로 map이라는 키(Key)와 값(Value) 두 쌍으로 데이터를 보관합니다.
이 두개 모두 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑시켜 값을 저장합니다.
기능적으로 비슷하며, 
사용하는 목적에 따라 나뉘는 것 같습니다.

드러나는 차이점을 뽑자면 HashMap은 java.util.HashMap; 같이 자바에서 지원하는 도구이지만,
HashTable은 직접 HashTable을 구현해야 한다는 점이 있으며,
2. HashMap은 동기화가 보장되지 않아, 싱글 스레드 환경에서 사용하는 게 좋습니다. 동기화 처리를 하지 않기 때문에 데이터를 탐색하는 속도가 빠릅니다.
3. HashTable은 동기화를 보장하므로, 멀티 스레드 환경에서 안전하게 사용 가능합니다.
메소드를 호출하기 전에 쓰레드간 동기화 락을 걸어 신뢰성을 보장한다.
그러나 HashMap 보다는 탐색하는 속도가 느리다.

HashMap -> key와 value에 null을 허용한다. 비동기 처리
HashTable -> key와 value에 null을 허용하지 않는다. 동기 처리

 

참조 : https://teck10.tistory.com/324

 

[JAVA] map 맵 hashmap 사용 방법 - linkedhashmap, hashtable 설명

맵(Map)은 사전(dictionary)과 비슷하다. people 이란 단어에 "사람", baseball 이라는 단어에 "야구"라는 뜻이 부합되듯이 Map은 Key와 Value를 한 쌍으로 갖는 자료형이다. map에는 hashmap과 hashtable로 나뉘는데

onpups.pe.kr

참고, HashMap 사용방법