반응형
✅ 자바 Map 인터페이스 주요 구현체 비교
구분 | HashMap | LinkedHashMap | TreeMap | Hashtable (레거시) |
기본 구조 | 해시 테이블 | 해시 테이블 + 입력 순서 유지 | 이진 검색 트리 (Red-Black Tree) | 해시 테이블 |
정렬 여부 | ❌ 없음 (순서 불확정) | ✅ 입력한 순서 유지 | ✅ 키 기준 자동 정렬 (Comparable or Comparator) | ❌ 없음 (순서 불확정) |
null 허용 여부 | ✅ null 키 1개, null 값 여러 개 허용 | ✅ 동일 | ❌ null 키 허용 안 함 | ❌ null 키/값 모두 허용 안 함 |
동기화 (Thread-safe) | ❌ 비동기화 | ❌ 비동기화 | ❌ 비동기화 | ✅ 내부적으로 동기화됨 (성능 낮음) |
성능 | 빠름 (O(1) 평균) | 약간 느림 (순서 관리 비용) | 느림 (O(log N)) | 가장 느림 |
레거시 여부 | ✅ 표준 사용 | ✅ 표준 사용 | ✅ 표준 사용 | 🔴 레거시 클래스 (과거 코드 유지용) |
사용 목적 | 일반적인 맵 (순서 필요 없음) | 순서 유지하며 맵 사용 시 | 정렬된 키 필요할 때 | 멀티스레드 환경에서 맵 사용 (비추천) |
✅ 사용 예제
🔹 HashMap (가장 자주 사용)
Map<String, Integer> map = new HashMap<>();
map.put("apple", 3);
map.put("banana", 2);
System.out.println(map.get("apple")); // 3
🔹 LinkedHashMap (입력 순서 유지)
Map<String, Integer> map = new LinkedHashMap<>();
map.put("a", 1);
map.put("b", 2);
// 출력 순서: a → b
🔹 TreeMap (자동 정렬)
Map<String, Integer> map = new TreeMap<>();
map.put("banana", 2);
map.put("apple", 3);
// 자동 정렬: apple → banana
🔹 Hashtable (과거 코드에서 사용)
Map<String, Integer> map = new Hashtable<>();
map.put("key", 1);
✅ 멀티스레드 환경에서 Map을 쓴다면?
🔐 Collections.synchronizedMap(...)
Map<String, Integer> syncMap = Collections.synchronizedMap(new HashMap<>());
🔐 ConcurrentHashMap (최신, 추천)
- 고성능 멀티스레드용 Map
Map<String, Integer> map = new ConcurrentHashMap<>();
✅ 상황별 추천 Map
필요 조건 | 추천 Map |
일반적인 키-값 저장 (순서 필요 없음) | HashMap ✅ |
키-값 저장 + 입력 순서 유지 | LinkedHashMap ✅ |
키 정렬 필요 (예: 랭킹, 범위 탐색) | TreeMap ✅ |
멀티스레드 환경에서 높은 성능 원함 | ConcurrentHashMap ✅ |
과거 코드 호환성 유지 목적 | Hashtable (지양) |
반응형
'언어 > java' 카테고리의 다른 글
[java] Set-HashSet, LinkedHashSet, TreeSet (0) | 2025.05.02 |
---|---|
[java] switch/case 문 (0) | 2025.05.02 |
[java] 이클립스 단축키 모음 (0) | 2025.05.02 |
[java] 삼항연산자 (0) | 2025.04.09 |
[java] JVM 동작 방식 및 메모리 구조 (0) | 2024.12.23 |