← 질문 목록
#157깊이 0
해시 충돌 발생 시 해결 방법은 무엇인가?
자료구조 · 알고리즘기초
체이닝과 개방 주소법을 사용한다. 체이닝은 연결 리스트로 데이터를 엮고, 개방 주소법은 빈 공간을 찾아 저장한다.
| 기준 | 체이닝 | 개방 주소법 |
|---|---|---|
| 저장 방식 | 외부 리스트 연결 | 내부 빈 슬롯 탐색 |
| 성능 저하 | 리스트 길어질 때 | 클러스터링 발생 시 |
| 메모리 사용 | 추가 메모리 필요 | 미리 할당된 공간 사용 |
체이닝은 삭제가 쉽고 테이블이 꽉 차지 않는다. 하지만 리스트가 길어지면 탐색 시간이 O(n)으로 늘어난다. 자바 8부터는 한 버킷에 쌓인 수가 임계치를 넘고 표 용량이 64 이상일 때 그 버킷을 트리로 바꾼다. 용량이 작으면 트리 대신 표를 먼저 키운다.
개방 주소법은 추가 메모리가 없지만, 데이터가 뭉치는 클러스터링 현상이 발생한다. 선형 탐색은 인접한 빈칸을 찾으므로 뭉침이 심해 효율이 떨어진다.
해시 함수가 균등하게 분산시키지 못하면 충돌이 잦아진다. 이 경우 시간 복잡도가 최악의 경우 O(n)까지 떨어진다.
추천 꼬리질문
관련 질문
- 해시 테이블의 평균 O(1)이 무너지는 경우는?자료구조 · 알고리즘해시 테이블의 평균 O(1)이 무너지는 핵심 원인이 해시 충돌이므로 두 개념은 직결된다.
- 해시 충돌을 해결하는 두 방식의 차이는 무엇인가?자료구조 · 알고리즘두 질문 모두 해시 충돌 해결 방법이라는 동일한 주제를 다루고 있다.
- 해시 충돌이 생기면 어떤 방법으로 푸는가?자료구조 · 알고리즘두 질문 모두 해시 충돌 발생 시의 해결 방법이라는 동일한 개념을 다루고 있다.
- 해시 충돌이 발생했을 때의 해결책은 무엇인가?자료구조 · 알고리즘두 질문 모두 해시 충돌 해결 방법이라는 동일한 개념을 다루고 있다.
- HashMap은 해시 충돌을 어떤 방식으로 처리하는가?언어 · 런타임HashMap의 충돌 처리는 일반 해시 충돌 해결법의 구체 사례다