TIL - Map (09.20)
2025. 9. 23. 16:30

📋 Map의 기본 개념

🎯 Map이란?

  • 키-값 쌍을 저장하는 자료 구조
  • 키는 유일해야 하며, 값은 중복 가능
  • 키를 통해 값을 빠르게 검색 가능
  • 순서를 유지하지 않음 (HashMap 기준)

🔧 Map 인터페이스 주요 메서드

데이터 저장/수정

메서드 설명

put(K key, V value) 키-값을 맵에 저장 (같은 키가 있으면 값 변경)
putAll(Map<?, ?> m) 지정된 맵의 모든 매핑을 현재 맵에 복사
putIfAbsent(K key, V value) 키가 없는 경우에만 저장

데이터 조회

메서드 설명

get(Object key) 키에 연결된 값 반환
getOrDefault(Object key, V defaultValue) 키가 없으면 기본값 반환
containsKey(Object key) 키 존재 여부 확인
containsValue(Object value) 값 존재 여부 확인

데이터 삭제/확인

메서드 설명

remove(Object key) 키와 연결된 값 제거
clear() 모든 키-값 제거
size() 키-값 쌍의 개수 반환
isEmpty() 맵이 비어있는지 확인

컬렉션 반환

메서드 반환 타입 설명

keySet() Set<K> 모든 키를 Set으로 반환
values() Collection<V> 모든 값을 Collection으로 반환
entrySet() Set<Map.Entry<K,V>> 키-값 쌍을 Entry Set으로 반환

💡 핵심 개념 이해

Entry (키-값 쌍)

// Entry는 키와 값을 하나로 묶는 객체
Set<Map.Entry<String, Integer>> entries = map.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
    String key = entry.getKey();
    Integer value = entry.getValue();
}

같은 키로 저장 시 동작

  • 기존 값이 교체
  • studentA=90 → studentA=100으로 변경

조건부 저장

// 방법 1: 직접 확인
if (!map.containsKey("key")) {
    map.put("key", value);
}

// 방법 2: putIfAbsent 사용 (권장)
map.putIfAbsent("key", value);

🗂️ Map 구현체 비교

Map vs Set의 관계

  • Map의 키 = Set과 동일한 구조
  • Map은 Key 옆에 Value가 추가된 형태
  • 구현체도 거의 동일: HashSet ↔ HashMap

주요 구현체 특징

1. HashMap

  • 구조: 해시 테이블 사용
  • 성능: 삽입/삭제/검색 모두 O(1)
  • 순서: 순서 보장 안 함
  • 용도: 가장 많이 사용되는 Map

2. LinkedHashMap

  • 구조: HashMap + 연결 리스트
  • 성능: HashMap과 유사한 O(1)
  • 순서: 입력 순서 보장
  • 용도: 순서가 중요한 경우

3. TreeMap

  • 구조: 레드-블랙 트리 기반
  • 성능: O(log n)
  • 순서: 키 기준 정렬
  • 용도: 정렬이 필요한 경우

실행 결과 비교

// 입력: C=10, B=20, A=30, 1=40, 2=50

HashMap:       A=30 1=40 B=20 2=50 C=10      // 순서 무작위
LinkedHashMap: C=10 B=20 A=30 1=40 2=50      // 입력 순서
TreeMap:       1=40 2=50 A=30 B=20 C=10      // 키 기준 정렬

⚠️ 주의사항

Map Key 객체의 필수 조건

  • hashCode()와 equals() 메서드를 반드시 구현해야 함
  • 이는 해시 테이블의 정확한 동작을 위해 필수

실무 권장사항

  • 일반적인 용도: HashMap 사용
  • 순서 유지 필요: LinkedHashMap 사용
  • 정렬 필요: TreeMap 사용

'🧑‍💻Sparta' 카테고리의 다른 글

TIL - Queue (09.22)  (0) 2025.09.23
TIL - Stack (09.21)  (0) 2025.09.23
TIL - HashSet (09.19)  (0) 2025.09.23
TIL - Java Hash (09.18)  (0) 2025.09.23
TIL - Java List (25.09.17)  (0) 2025.09.17