HashMap 자료구조

리리티·2022년 11월 14일
0

HashMap의 자료구조

Key-Value가 1:1로 Mapping 되는 자료구조이며 Mapping으로 인해 삽입, 삭제, 검색이 평균적으로 O(1)인 자료구조이다. Key는 중복을 허용하지 않지만, Value는 중복을 허용

  • 내부구조는 배열로 되어 있다
  • key는 직접 내부 배열의 인덱스가 될 수 있으면 이를 버킷이라함
  • hash함수를 사용할 때 해시 버킷이 적다면 메모리를 절약할 수 있지만 해시충돌의 빈도가 높아진다.
  • 특정 수치가 넘어가면 해시 버킷을 2배로 확장
  • 해시함수를 구할 때 float으로 되어 있다면 해시충돌을 낮출 수 있지만 자바는 int로 되어있어 해시 충돌을 낮추기 위해 보조 해시 함수를 사용해 해시 값을 변영한다.

최악의 케이스

  • Java 8 부터 HashMap, LinkedHashMap의 퍼포먼스가 향상
  • 기존에는 키 충돌이 많은 아이템들을 linked list로 관리했는데, 8이후로는 balanced tree로 관리
    • 최악의 경우 시간 복잡도가 O(n)에서 O(log n)으로 향상됐다.
    • 충돌되는 키가 많은 해시 저장소는 linked list에 저장하지 않고 balanced tree에 저장
    • 번경되는 사항은 HashMap, LinkedHashMap, ConcurrentHashMap에만 적용

해시 버킷의 아이템 수가 특정 임계 값을 초과하면, linked list를 balanced tree로 바꾼다.

참조

https://johngrib.github.io/wiki/java8-performance-improvement-for-hashmap/

profile
remind

0개의 댓글