25.02.03 TIL MAP

신성훈·2025년 2월 3일
0

TIL

목록 보기
127/162

1. Map이란?

Java의 Map 인터페이스키-값(Key-Value) 쌍으로 데이터를 저장하는 자료구조입니다.
배열이나 리스트와 달리 고유한 키를 기반으로 데이터를 빠르게 검색할 수 있습니다.

특징

  • Key는 중복 불가, Value는 중복 가능
  • 순서 보장이 안 됨 (일부 구현체는 순서를 유지)
  • Key를 이용한 빠른 조회 지원

2. Map의 주요 구현 클래스

Java에서 Map 인터페이스를 구현한 대표적인 클래스는 다음과 같습니다.

구현체특징
HashMap빠른 검색 속도, 순서 보장 안 됨
LinkedHashMap입력 순서 유지
TreeMapKey 기준 정렬 (오름차순)
Hashtable동기화 지원 (멀티스레드 환경)

3. 주요 메서드

메서드설명
put(K key, V value)Key-Value 추가
get(K key)Key에 해당하는 Value 반환
remove(K key)Key-Value 삭제
containsKey(K key)해당 Key 존재 여부 확인
containsValue(V value)해당 Value 존재 여부 확인
size()저장된 Key-Value 개수 반환
isEmpty()비어있는지 확인
keySet()모든 Key를 Set으로 반환
values()모든 Value를 Collection으로 반환
entrySet()모든 Key-Value를 Set으로 반환

4. Map 사용 예시

(1) HashMap 기본 사용

import java.util.HashMap;
import java.util.Map;

public class HashMapExample {
    public static void main(String[] args) {
        Map<String, Integer> scores = new HashMap<>();
        
        // 데이터 추가
        scores.put("Alice", 90);
        scores.put("Bob", 85);
        scores.put("Charlie", 88);
        
        // 데이터 조회
        System.out.println("Alice의 점수: " + scores.get("Alice"));  // 90

        // Key 존재 여부 확인
        System.out.println("Bob이 존재하는가? " + scores.containsKey("Bob"));  // true

        // 데이터 삭제
        scores.remove("Charlie");

        // 전체 데이터 출력
        for (Map.Entry<String, Integer> entry : scores.entrySet()) {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
    }
}

(2) LinkedHashMap (입력 순서 유지)

import java.util.LinkedHashMap;
import java.util.Map;

public class LinkedHashMapExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new LinkedHashMap<>();
        map.put("C", 3);
        map.put("A", 1);
        map.put("B", 2);

        System.out.println(map);  // {C=3, A=1, B=2} (입력 순서 유지)
    }
}

(3) TreeMap (Key 기준 정렬)

import java.util.TreeMap;
import java.util.Map;

public class TreeMapExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new TreeMap<>();
        map.put("C", 3);
        map.put("A", 1);
        map.put("B", 2);

        System.out.println(map);  // {A=1, B=2, C=3} (Key 기준 오름차순 정렬)
    }
}

5. Map과 동기화

기본적으로 HashMap멀티스레드 환경에서 안전하지 않음
멀티스레드 환경에서는 ConcurrentHashMap을 사용하는 것이 좋음

(1) 동기화된 Map 사용

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class SynchronizedMapExample {
    public static void main(String[] args) {
        Map<String, Integer> map = Collections.synchronizedMap(new HashMap<>());
        map.put("A", 1);
        map.put("B", 2);
        System.out.println(map);
    }
}

(2) ConcurrentHashMap 사용 (멀티스레드 환경에서 성능 우수)

import java.util.concurrent.ConcurrentHashMap;
import java.util.Map;

public class ConcurrentHashMapExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new ConcurrentHashMap<>();
        map.put("A", 1);
        map.put("B", 2);
        System.out.println(map);
    }
}

6. 마무리

Map은 Java에서 빠른 데이터 조회를 위해 필수적인 자료구조입니다.
특히 HashMap은 가장 많이 사용되지만 순서가 중요할 경우 LinkedHashMap, 정렬이 필요하면 TreeMap을 고려해야 합니다.
멀티스레드 환경에서는 ConcurrentHashMap을 활용하는 것이 성능과 안정성 측면에서 유리하다는 점을 다시 한 번 정리할 수 있었습니다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글