자바에서 Map(맵)이란?
- Map은 키-값(Key-Value) 쌍을 저장하는 데이터 구조
- 자바에서 Map은 Collection 인터페이스의 일부가 아니라 별도로 존재하는 인터페이스
- 중복된 키를 허용하지 않고 각 키는 하나의 값만을 가질 수 있다.
주요 Map 구현 클래스
1️⃣ HashMap
- 가장 많이 사용되는 Map 구현체
- 키(Key) 값으로 hashCode()를 사용하여 저장하므로 빠른 검색 속도를 가짐
- 순서를 보장하지 않는다.
- null 키와 null 값을 허용
더보기
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
map.put("Banana", 5);
map.put("Orange", 7);
System.out.println("Apple 개수: " + map.get("Apple"));
System.out.println("전체 Map: " + map);
}
}
2️⃣ LinkedHashMap
- 입력 순서를 유지하는 Map
- 내부적으로 이중 연결 리스트(Doubly Linked List) 를 사용하여 순서를 유지
- HashMap보다 약간 성능이 떨어질 수 있다.
더보기
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("Banana", 5);
map.put("Apple", 10);
map.put("Orange", 7);
System.out.println("입력 순서 유지: " + map);
}
}
3️⃣ TreeMap
- 키(Key)의 정렬 순서를 유지하는 Map
- 키가 Comparable을 구현했거나 Comparator를 제공해야 함
- 내부적으로 Red-Black Tree를 사용하여 자동 정렬됨
- HashMap보다 삽입, 삭제, 조회 성능이 느림
더보기
import java.util.Map;
import java.util.TreeMap;
public class TreeMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new TreeMap<>();
map.put("Orange", 7);
map.put("Apple", 10);
map.put("Banana", 5);
System.out.println("자동 정렬된 Map: " + map);
}
}
Map의 주요 메서드
| 메서드 | 설명 |
| put(K key, V value) | 키-값을 추가 |
| get(Object key) | 키에 해당하는 값을 반환 |
| remove(Object key) | 특정 키를 삭제 |
| containsKey(Object key) | 키가 존재하는지 확인 |
| containsValue(Object value) | 값이 존재하는지 확인 |
| size() | 요소 개수를 반환 |
| isEmpty() | 비어있는지 확인 |
| clear() | 모든 요소 삭제 |
Map의 반복 (Entry Set 사용)
Map을 반복할 때는 entrySet()을 활용하는 것이 가장 일반적입니다.
더보기
import java.util.HashMap;
import java.util.Map;
public class MapIterationExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
map.put("Banana", 5);
map.put("Orange", 7);
// 1. entrySet()을 사용한 반복
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
// 2. keySet()을 사용한 반복
for (String key : map.keySet()) {
System.out.println(key + " : " + map.get(key));
}
}
}
Map 상황별 정리
| 종류 | 특징 | 사용 사례 |
| HashMap | 빠른 성능, 순서 유지 X | 일반적인 Key-Value 저장 |
| LinkedHashMap | 입력 순서 유지 | 순서를 보장하면서 빠르게 검색 |
| TreeMap | 키 기준 정렬 | 자동 정렬이 필요한 경우 |
| Hashtable | 동기화 지원 (멀티스레드) | 멀티스레드 환경에서 안전하게 사용 |
정리
- Map은 키-값 형태로 데이터를 저장하며, 키는 중복되지 않음
- 가장 많이 쓰는 HashMap은 빠른 검색 속도를 가짐
- LinkedHashMap은 입력 순서를 유지하고, TreeMap은 자동 정렬됨
- Hashtable은 멀티스레드 환경에서 사용되지만 요즘은 ConcurrentHashMap을 더 많이 씀
'JAVA' 카테고리의 다른 글
| 가상 쓰레드 (Virtual Threads) (0) | 2025.03.12 |
|---|---|
| CompletableFuture (비동기 처리) (1) | 2025.03.12 |
| Executor 프레임워크 (0) | 2025.03.12 |
| 쓰레드 동기화 (Synchronization) (3) | 2025.03.11 |
| 쓰레드(Thread) (0) | 2025.03.11 |