hashMap vs hashTable 차이

인류보안·2024년 11월 4일

개발

목록 보기
2/7

HashMap과 Hashtable의 차이점: Thread-safety와 Null 허용 여부
Java에서 HashMap과 Hashtable은 모두 키-값 쌍을 저장하는 데 사용되는 해시 테이블 기반의 자료 구조입니다. 하지만 몇 가지 중요한 차이점이 있습니다.

  1. Thread-safety
    Hashtable: Thread-safe합니다. 즉, 여러 스레드에서 동시에 접근해도 안전하게 동작합니다. 내부적으로 동기화되어 있어 스레드 간 충돌을 방지합니다.
    HashMap: Thread-safe하지 않습니다. 여러 스레드에서 동시에 접근하면 데이터가 손상될 수 있습니다. 단일 스레드 환경에서 사용하거나, 멀티 스레드 환경에서는 외부에서 동기화를 처리해야 합니다.

  2. Null 허용 여부
    Hashtable: 키와 값으로 null을 허용하지 않습니다. null을 삽입하려고 하면 NullPointerException이 발생합니다.
    HashMap: 키로 하나의 null 값과 여러 개의 null 값을 허용합니다.

  3. 성능
    HashMap: 일반적으로 Hashtable보다 성능이 좋습니다. 동기화 처리가 없기 때문에 오버헤드가 적습니다.
    Hashtable: 동기화 처리 때문에 HashMap보다 성능이 떨어질 수 있습니다.

  4. Legacy
    Hashtable: Java의 초기 버전부터 존재하는 legacy 클래스입니다.
    HashMap: Java 1.2부터 도입된 Collections Framework의 일부입니다.

  5. Fail-fast vs. Fail-safe
    Hashtable: 열거 중에 컬렉션이 수정되면 ConcurrentModificationException을 던지는 fail-fast iterator를 사용합니다.
    HashMap: 열거 중에 컬렉션이 수정되어도 예외를 던지지 않는 fail-safe iterator를 사용합니다.
    요약
    | 특징 | HashMap | Hashtable | |---|---|---| | Thread-safety | Thread-safe하지 않음 | Thread-safe | | Null 허용 | 키로 하나의 null, 값으로 여러 개의 null 허용 | null 허용하지 않음 | | 성능 | 일반적으로 더 빠름 | 동기화로 인해 느릴 수 있음 | | Legacy | Collections Framework의 일부 | Legacy 클래스 | | Iterator | Fail-safe | Fail-fast |
    결론
    단일 스레드 환경에서는 HashMap을 사용하는 것이 일반적으로 더 좋습니다. 멀티 스레드 환경에서는 ConcurrentHashMap과 같은 thread-safe한 컬렉션을 사용하는 것이 좋습니다. Hashtable은 legacy 클래스이므로 가능하면 사용하지 않는 것이 좋습니다.

profile
#Program #Trading

0개의 댓글