개발기록
HashMap과 HashTable의 차이 본문
HashMap과 HashTable의 차이점
Java에서 키-값 쌍을 저장하는 데 사용되는 두 가지 주요 자료구조로 HashMap과 HashTable이 있습니다. 이 두 클래스는 비슷해 보이지만 중요한 차이점들이 있습니다. 이 포스트에서는 HashMap과 HashTable의 주요 차이점을 살펴보겠습니다.
1. 동기화 (Synchronization)
- HashTable: 동기화됨 (thread-safe)
- HashMap: 동기화되지 않음 (not thread-safe)
HashTable은 모든 메서드가 동기화되어 있어 멀티스레드 환경에서 안전합니다. 반면 HashMap은 동기화되지 않아 단일 스레드 환경에서 더 빠르게 동작합니다.
2. Null 키와 값 허용
- HashTable: null 키와 값을 허용하지 않음
- HashMap: null 키 하나와 여러 null 값을 허용
HashMap은 null을 키로 사용할 수 있으며, 여러 개의 null 값을 가질 수 있습니다. HashTable은 null을 키나 값으로 사용하려고 하면 NullPointerException을 발생시킵니다.
3. 성능
- HashTable: 동기화로 인해 상대적으로 느림
- HashMap: 동기화되지 않아 더 빠름
단일 스레드 환경에서는 HashMap이 일반적으로 더 좋은 성능을 보입니다.
4. 반복자 (Iterator)
- HashTable: Enumeration과 Iterator 사용
- HashMap: Iterator만 사용
HashTable은 레거시 클래스이기 때문에 Enumeration을 지원하지만, HashMap은 더 현대적인 Iterator만을 사용합니다.
5. 확장 (Inheritance)
- HashTable: Dictionary 클래스를 상속
- HashMap: AbstractMap 클래스를 상속
이는 두 클래스의 설계 철학과 역사적 배경의 차이를 보여줍니다.
6. 초기 용량과 로드 팩터
두 클래스 모두 초기 용량과 로드 팩터를 지정할 수 있지만, 기본값에 차이가 있습니다:
- HashTable: 기본 초기 용량 11, 로드 팩터 0.75
- HashMap: 기본 초기 용량 16, 로드 팩터 0.75
결론
대부분의 현대 Java 애플리케이션에서는 HashMap을 사용하는 것이 권장됩니다. 멀티스레드 환경에서 동기화가 필요한 경우, ConcurrentHashMap을 사용하는 것이 HashTable보다 더 효율적인 선택입니다.
HashTable은 주로 레거시 코드와의 호환성을 위해 유지되고 있으며, 새로운 프로젝트에서는 거의 사용되지 않습니다.
각 상황에 맞는 적절한 자료구조를 선택하는 것이 중요하며, 대부분의 경우 HashMap이 더 나은 선택이 될 것입니다.
'자료구조' 카테고리의 다른 글
HashMap의 Thread-safety와 대안들 (0) | 2024.09.01 |
---|---|
해시 충돌 해결 방법: Chaining vs Open Addressing (0) | 2024.09.01 |
[자료구조] Hash Collision 개념 (0) | 2021.06.21 |
[자료구조] Binary Search Tree (0) | 2021.06.06 |
[자료구조] Graph와 Tree의 차이점에 대해서 설명 (0) | 2021.06.02 |