Map

mskimdev·2026년 4월 21일

Java Collection

목록 보기
5/5
post-thumbnail

Map

지금까지 본 List와 Set은 값 하나씩을 담는다. 그런데 "이름 → 전화번호", "학번 → 이름"처럼 쌍으로 묶인 데이터를 다뤄야 할 때가 있다. 이를 위한 컬렉션이 Map이다.


Map이란

Map키(Key)와 값(Value)의 쌍으로 데이터를 저장하는 컬렉션이다. 사전처럼, 단어(Key)를 찾으면 뜻(Value)이 나오는 구조다.

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

Map<String, String> phoneBook = new HashMap<>();
phoneBook.put("김민수", "010-1234-5678");
phoneBook.put("이지은", "010-9876-5432");
phoneBook.put("박준호", "010-1111-2222");

System.out.println(phoneBook.get("김민수")); // 010-1234-5678

Map의 핵심 특징

키는 중복될 수 없다. 같은 키로 값을 두 번 넣으면 나중 값이 덮어쓴다.

Map<String, Integer> map = new HashMap<>();
map.put("사과", 1000);
map.put("사과", 2000); // 덮어쓰기

System.out.println(map.get("사과")); // 2000

값은 중복될 수 있다. 다른 키가 같은 값을 가져도 된다.

순서를 보장하지 않는다. (HashMap 기준)


Map의 종류

HashMap

가장 일반적으로 쓰이는 Map이다. 내부적으로 해시 테이블을 사용해서 검색/추가/삭제가 빠르다. 순서는 보장하지 않는다.

Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("바나나", 500);
hashMap.put("사과", 1000);
hashMap.put("딸기", 800);
System.out.println(hashMap); // 순서 보장 없음

LinkedHashMap

입력한 순서를 유지하는 Map이다.

import java.util.LinkedHashMap;

Map<String, Integer> linkedMap = new LinkedHashMap<>();
linkedMap.put("바나나", 500);
linkedMap.put("사과", 1000);
linkedMap.put("딸기", 800);
System.out.println(linkedMap); // {바나나=500, 사과=1000, 딸기=800} (입력 순서 유지)

TreeMap

키를 정렬된 순서로 유지하는 Map이다. 키가 문자열이면 사전 순, 숫자면 오름차순으로 자동 정렬된다.

import java.util.TreeMap;

Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("바나나", 500);
treeMap.put("사과", 1000);
treeMap.put("딸기", 800);
System.out.println(treeMap); // {바나나=500, 딸기=800, 사과=1000} (키 기준 정렬)


주요 메서드

Map<String, Integer> map = new HashMap<>();

// 추가 / 수정
map.put("사과", 1000);

// 조회
map.get("사과");             // 1000 (없으면 null)
map.getOrDefault("포도", 0); // 키가 없으면 기본값 반환

// 삭제
map.remove("사과");

// 확인
map.containsKey("바나나");   // 키 존재 여부
map.containsValue(1000);     // 값 존재 여부
map.size();                  // 크기
map.isEmpty();               // 비어있는지

// 전체 조회
map.keySet();                // 키 목록 (Set)
map.values();                // 값 목록 (Collection)
map.entrySet();              // 키-값 쌍 목록

Map 순회

Map은 인덱스가 없으므로 keySet() 또는 entrySet()으로 순회한다.

Map<String, Integer> map = new HashMap<>();
map.put("사과", 1000);
map.put("바나나", 500);
map.put("딸기", 800);

// 키로 순회
for (String key : map.keySet()) {
    System.out.println(key + ": " + map.get(key));
}

// 키-값 쌍으로 순회 (더 효율적)
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue());
}

컬렉션 정리

지금까지 배운 컬렉션 프레임워크를 한눈에 정리하면 이렇다.

컬렉션특징대표 구현체
List순서 유지, 중복 허용, 인덱스 접근ArrayList, LinkedList
Set중복 불허, 순서 미보장HashSet, TreeSet
Map키-값 쌍, 키 중복 불허HashMap, TreeMap

어떤 컬렉션을 써야 할지 막막할 때는 세 가지만 따져보면 된다.

중복을 허용해야 하는가?       → List
중복 없이 값만 모아야 하는가?  → Set
키로 값을 찾아야 하는가?       → Map
profile
<- 개발 공부하는 나

0개의 댓글