Hash Table, Hash Map, Hash Set

hyun0·2024년 1월 24일

자료구조

목록 보기
1/4

Hash ?

hash function

  • 데이터의 효율적 관리를 목적으로 임의의 길이의 데이터(message)를 고정된 길이의 데이터(hash value, hash code, digest, hash)로 매핑하는 함수
  • 해시함수의 해시값이 최대한 균등하게 나오게 하는것이 중요
  • 동일한 input에 대해서 같은 결과를 도출

hashing

  • 키(key) : 매핑 전 원래 데이터의 값
  • 해시값 (hash value) : 매핑 후 데이터의 값
    -> hashing : 매핑하는 과정 자체

collision

  • 해시함수는 해시값의 개수보다 많은 키값을 해시값으로 변환(다대일 대응)하기 때문에 해시함수가 서로 다른 두개의 키에 대해 동일한 해시값을 내는 해시 충돌이 발생
  • 충돌을 최소화할 수 있는 해시함수를 사용해야함


Hash Table

  • Map 인터페이스를 구현하는 클래스
    • key-value쌍으로 데이터를 저장
    • 키 중복 불가(value는 가능)
      • 동일한 키를 가진 값 추가시, 기존 값이 새 값으로 대체됨
  • key와 value에 대해 null 허용X
  • 동기화O, thread-safe함, 속도가 느림
    • (멀티스레드 환경이 아니라면) 다른 스레드가 block되고 unblock 되는 대기 시간을 기다려야돼서 상대적으로 느림
  • 보조 해시 함수 사용X

Hash Table 해시함수

  • 임의의 데이터를 정수로 변환
    • 데이터가 저장되는 곳: 버킷(bucket) 또는 슬롯(slot)



Hash Map

  • Map 인터페이스를 구현하는 클래스
    • key-value쌍으로 데이터를 저장
    • 키 중복 불가(value는 가능)
      • 동일한 키를 가진 값 추가시, 기존 값이 새 값으로 대체됨
  • key 또는 value에 대해 null 허용O
    • 단 하나의 null값을 key로 가질 수 있음, value는 여러 null값 가능
  • 동기화X, thread-safe 하지 않음, 속도가 빠름
    • 멀티스레드가 동시에 사용할 때 문제가 발생할 수 잇음
  • 보조 해시 함수를 사용해서 해시충돌이 덜 발생 -> 상대적으로 성능이 좋음
  • Map의 Key값의 해시코드 변환이 Set의 객체의 해시코드 계산보다 빠름

보조 해시 함수

  • key의 해시값을 변형하여 해시 충돌 가능성을 줄임


Hash Set

  • Set 인터페이스를 구현하는 클래스
  • HashMap 기반으로 저장
    • HashSet의 각 원소(객체)는 HashMap의 key, value는 dummy
  • 중복 불가, unique값만 저장
  • 단 한개의 null값 허용
  • Set의 객체의 해시코드 계산이 Map의 Key값의 해시코드 변환보다 느림





해시 사용예시

  • 암호과정 ,
    해시테이블 -> index, 캐싱 , redis

참고

profile
聽卽振, 視卽記, 爲卽覺

0개의 댓글