JAVA · 컬렉션
HashMap 내부 구조
HashMap의 해시 버킷, 트리 변환, 로드 팩터를 이해합니다.
컬렉션고급HashMap해시버킷로드팩터
핵심 설명
HashMap의 해시 버킷, 트리 변환, 로드 팩터를 이해합니다.
Java code
import java.util.*;
public class HashMapInternal {
public static void main(String[] args) {
// 기본: 초기 용량 16, 로드팩터 0.75
HashMap<String, Integer> map = new HashMap<>();
// 용량 지정 (2의 거듭제곱으로 반올림)
HashMap<String, Integer> sized = new HashMap<>(32, 0.75f);
// put: O(1) 평균
map.put("Alice", 90);
map.put("Bob", 85);
// 해시 충돌 시: LinkedList -> TreeMap (8개 초과)
// 내부 동작:
// 1. key.hashCode() 계산
// 2. hash를 버킷 인덱스로 변환
// 3. 같은 버킷이면 equals()로 비교
// 4. 충돌 8개 초과 -> Red-Black Tree로 변환
// 중요: hashCode()와 equals() 계약
// equals()가 true면 hashCode()도 같아야 함
// Java 9+ 팩토리
Map<String, Integer> immutable = Map.of("a", 1, "b", 2);
Map<String, Integer> copied = Map.copyOf(map);
// 유용한 메서드
map.getOrDefault("없는키", 0);
map.putIfAbsent("Alice", 100); // 이미 있으면 무시
map.computeIfAbsent("Charlie", k -> k.length());
map.merge("Alice", 10, Integer::sum); // 90 + 10 = 100
}
}학습 팁
예상 원소 수를 알면 new HashMap(expectedSize / 0.75 + 1)로 초기화하면 리해싱을 방지합니다.
주의할 점
가변 객체를 키로 사용하면 해시값이 변경되어 데이터를 찾을 수 없게 됩니다. 키는 반드시 불변이어야 합니다.
자주 묻는 질문
HashMap 내부 구조란 무엇인가요?
HashMap 의 해시 버킷, 트리 변환, 로드 팩터를 이해합니다.
HashMap 내부 구조 학습 시 주의할 점은 무엇인가요?
가변 객체를 키로 사용하면 해시값이 변경되어 데이터를 찾을 수 없게 됩니다. 키는 반드시 불변이어야 합니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.