Java 오류 & 개발/Java 기본 문법 & 오류
[Java] HashMap vs Hashtable 차이점 및 활용법
Jinsapp
2025. 3. 12. 13:59
[Java] HashMap vs Hashtable 차이점 및 활용법
1. HashMap과 Hashtable이란?
Java에서 데이터를 **Key-Value 형태**로 저장할 때 사용되는 대표적인 자료구조가 HashMap과 Hashtable입니다.
두 자료구조 모두 Map
인터페이스를 구현하지만, 몇 가지 중요한 차이점이 있습니다.
2. HashMap과 Hashtable의 주요 차이점
특징 | HashMap | Hashtable |
---|---|---|
동기화(Synchronization) | 비동기(멀티스레드 환경에서 안전하지 않음) | 동기화 지원(멀티스레드 환경에서 안전) |
성능 | 빠름(동기화가 없어서 성능 우수) | 느림(동기화로 인해 속도 저하) |
Null 허용 여부 | Key 와 Value 에 null 허용 | Key 와 Value 에 null 허용 안함 |
대체 클래스 | ConcurrentHashMap 사용 가능 | 거의 사용되지 않음 |
3. HashMap과 Hashtable 예제
✅ HashMap 사용 예제
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
HashMap map = new HashMap<>();
// 값 추가
map.put("apple", 100);
map.put("banana", 200);
map.put("cherry", 300);
// Null 허용
map.put(null, 500);
map.put("grape", null);
// 값 출력
System.out.println("HashMap: " + map);
}
}
📌 실행 결과:
HashMap: {null=500, apple=100, banana=200, cherry=300, grape=null}
✔ HashMap은 null
키와 null
값을 허용합니다.
✅ Hashtable 사용 예제
import java.util.Hashtable;
public class HashtableExample {
public static void main(String[] args) {
Hashtable table = new Hashtable<>();
// 값 추가
table.put("apple", 100);
table.put("banana", 200);
table.put("cherry", 300);
// Null 허용 여부 테스트 (예외 발생)
// table.put(null, 500); // NullPointerException 발생
// table.put("grape", null); // NullPointerException 발생
// 값 출력
System.out.println("Hashtable: " + table);
}
}
📌 실행 결과:
Hashtable: {apple=100, banana=200, cherry=300}
✔ Hashtable은 null
키와 null
값을 허용하지 않습니다. 위 코드에서 table.put(null, 500)
을 실행하면 NullPointerException
이 발생합니다.
4. 언제 HashMap과 Hashtable을 사용할까?
- HashMap: 단일 스레드 환경에서 빠른 성능이 필요할 때 사용
- Hashtable: 멀티스레드 환경에서 동기화가 필요할 때 사용 (그러나 대체로
ConcurrentHashMap
을 권장) - ConcurrentHashMap: Hashtable의 동기화 문제를 해결한 대체 클래스
🔍 결론
- ✔ **HashMap**은
null
키와 값을 허용하지만 동기화 지원 없음 (빠름) - ✔ **Hashtable**은 동기화 지원하지만
null
을 허용하지 않음 (느림) - ✔ 멀티스레드 환경에서는 **ConcurrentHashMap**을 사용하는 것이 더 좋음