언어/자바

[Java] Map 메서드

believekim 2025. 3. 21. 17:47

 

Map은 key-value 구조로 데이터를 저장하는 자료구조로
순서없이 저장되며 인터페이스다.

 

 

1. Map 다이어그램

  • Map은 상속계층이 없기에 구현체인 HashMap 다이어그램으로 대체
  • Cloneable: 객체 복사를 가능하게 해주는 역할(깊은 복사, 얉은 복사)
  • Serializable: 객체를 직렬화해서 저장하거나 전송할 수 있게 해주는 마커 인터페이스


 

 

2. Map 메서드

  • Map 인터페이스는 HashMap, LinkedHashMap, TreeMap 등에서 구현
  • import java.util.Map
  • 자주 사용하는 메서드는 빨간색
메서드 설명
put(K key, V value) 키-값 쌍 추가 또는 수정
putAll(Map<? extends K,? extends V> m) 다른 Map의 모든 내용을 추가
get(Object key) 키로 값 조회
remove(Object key) 해당 키의 값 제거
containsKey(Object key) 특정 키 존재 여부 확인
containsValue(Object value) 특정 값 존재 여부 확인
size() 저장된 데이터 개수 반환
isEmpty() 비어있는지 확인
clear() 모든 데이터 제거
keySet() 모든 키 반환 (Set 형태)
values() 모든 값 반환 (Collection 형태)
entrySet() 키-값 쌍을 Set<Map.Entry<K, V>> 형태로 반환
replace(K key, V value) 해당 키의 값을 새 값으로 교체
replace(K key, V oldValue, V newValue) 키와 기존 값이 일치하면 새 값으로 교체
getOrDefault(Object key, V defaultValue) 값이 없으면 기본값 반환
forEach(BiConsumer<? super K,? super V> action) 모든 키-값 쌍에 대해 반복 실행

 

 

3. 주요 메서드 예시

import java.util.*;

public class MapExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();

        // 1. put() - 값 추가
        map.put("Apple", 3);
        map.put("Banana", 5);
        map.put("Orange", 2);

        // 2. get() - 값 가져오기
        System.out.println("Apple의 개수: " + map.get("Apple")); // 3

        // 3. containsKey() - 키 존재 여부 확인
        if (map.containsKey("Banana")) {
            System.out.println("바나나가 있습니다.");
        }

        // 4. remove() - 값 삭제
        map.remove("Orange");

        // 5. keySet() - 모든 키 조회
        System.out.println("과일 목록: " + map.keySet());

        // 6. entrySet() - 전체 조회
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }

        // 7. getOrDefault()
        int count = map.getOrDefault("Grape", 0);
        System.out.println("Grape의 개수 (없으면 0): " + count);
    }
}

 

 

4. Map 구현체 비교

  • 주로 HashMap을 사용
비교 HashMap LinkedHashMap TreeMap
순서 없음 (랜덤) 저장한 순서 유지 키로 정렬
속도 가장 빠름 HashMap보다 약간 느림 가장 느림 (Red-Black Tree)
정렬 기준 없음 입력 순서 키의 자연 순서 또는 Comparator
null 허용 키, 값 둘 다 가능 키, 값 둘 다 가능 키는 1개만 null 허용 (정렬 특성상)
용도 기본 Map 용도 순서 유지가 필요한 경우 정렬 필요할 때 사용
  • 예시코드
// HashMap
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("banana", 1);
hashMap.put("apple", 2);
hashMap.put("cherry", 3);
System.out.println(hashMap);  // 순서 랜덤

// LinkedHashMap
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("banana", 1);
linkedHashMap.put("apple", 2);
linkedHashMap.put("cherry", 3);
System.out.println(linkedHashMap);  // 입력 순서 유지

// TreeMap
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("banana", 1);
treeMap.put("apple", 2);
treeMap.put("cherry", 3);
System.out.println(treeMap);  // 알파벳 순 정렬