[JAVA] HashMap 원리

2021. 6. 13. 15:56·JAVA
728x90

정의

  • Key-Value가 1:1로 Mapping되는 자료구조
  • Mapping으로 인해 삽입, 삭제, 검색이 평균적으로 O(1)인 자료구조
  • Key에 대한 해시값을 기반으로 값을 저장 및 조회하는 자료구조

개념 정리

  • HashMap은 기본적으로 내부구조는 배열로 되어 있음
  • Key는 직접 내부 배열의 인덱스가 될 수 있으며, 이를 버킷이라고 함
  • 인덱스는 hashcode()에서 리턴하는 int값(정수값) % 실제 표현이 가능한 정수범위(n)보다 작은 M개의 원소로 만들어짐, 해당 인덱스는 1 / M 확률로 동일한 값으로 발생할 수 있으며, 이를 해시충돌이라고 함
  • 해시충돌 방지 기법으로 Open Addressing 방식과 Seperate Chaning 방식이 있으며, Java HashMap 같은 경우 Seperate Chaning 방식으로 처리함 

충돌 방지 기법

  • Open Addressing : 해시충돌 발생시 인접 인덱스 값을 구해서 해시 충돌을 우회하는 방법
  • Separate Chaining : 동일한 해시 값이 있을 경우 LinkedList로 관리하고, 8개 이상인 경우 Tree로 변경(6개 이하가되면 다시 LinkedList)하여 관리하는 방법 

 

저작자표시

'JAVA' 카테고리의 다른 글

[JAVA] List Collection(ArrayList / LinkedList / Vector)  (0) 2021.06.26
[JAVA] String / StringBuilder / StringBuffer  (0) 2021.06.20
[JAVA] 일급컬렉션  (0) 2021.06.10
[JAVA] Map / getOrDefault  (0) 2021.06.10
[JAVA] 예외(Exception)  (0) 2021.06.07
'JAVA' 카테고리의 다른 글
  • [JAVA] List Collection(ArrayList / LinkedList / Vector)
  • [JAVA] String / StringBuilder / StringBuffer
  • [JAVA] 일급컬렉션
  • [JAVA] Map / getOrDefault
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    Elk
    SQL
    클린코드
    java
    splunk
    자바
    docker
    AWS
    이펙티브코틀린
    엘라스틱서치
    cleancode
    ElasticSearch
    Kafka
    JPA
    IntelliJ
    프로그래머스
    go
    이펙티브 코틀린
    Spring
    코틀린
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[JAVA] HashMap 원리
상단으로

티스토리툴바