본문 바로가기
언어/java

[java] Map-HashMap, LinkedHashMap, TreeMap

by 개발LOG 2025. 5. 2.
반응형

✅ 자바 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