1. Map이란?
•
Map<K, V>는 Key를 기준으로 Value를 저장하는 구조이다.
•
Key는 중복 불가, Value는 중복 가능
•
대표적인 구현체:
◦
HashMap: 가장 많이 쓰이며, 순서를 보장하지 않음, O(1)의 탐색 성능
◦
LinkedHashMap: 입력 순서 유지
◦
TreeMap: Key 기준 오름차순 정렬 유지
◦
Hashtable: 동기화(synchronized)된 Map
◦
ConcurrentHashMap: 병렬 처리 환경에서 사용
2. Map 기본 사용법
import java.util.*;
public class MapExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
// 삽입
map.put("apple", 3);
map.put("banana", 2);
// 조회
System.out.println(map.get("apple")); // 3
// 존재 여부 확인
System.out.println(map.containsKey("banana")); // true
// 반복
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
// 삭제
map.remove("apple");
}
}
=== 출력 결과 ===
3
true
banana => 2
apple => 3
Java
복사
3. 자주 쓰이는 메서드 정리
메서드 | 설명 |
put(K key, V value) | 요소 추가 |
get(K key) | key에 해당하는 value 반환 |
containsKey(K key) | key 존재 여부 |
containsValue(V value) | value 존재 여부 |
remove(K key) | 요소 삭제 |
keySet() | 모든 key 반환 |
values() | 모든 value 반환 |
entrySet() | key-value 쌍 전체 반환 |
4. 코딩테스트 활용 예시
예제 1: 문자열에서 문자 빈도수 세기
public static Map<Character, Integer> countChars(String s) {
Map<Character, Integer> map = new HashMap<>();
for (char c : s.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
return map;
}
Java
복사
예제 2: 배열에서 가장 많이 등장한 숫자
public static int mostFrequent(int[] arr) {
Map<Integer, Integer> map = new HashMap<>();
for (int num : arr) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
int maxCount = 0;
int answer = -1;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if (entry.getValue() > maxCount) {
maxCount = entry.getValue();
answer = entry.getKey();
}
}
return answer;
}
Java
복사
5. 자주 쓰는 Map 코드 템플릿
1. 기본 카운팅
map.put(key, map.getOrDefault(key, 0) + 1);
Java
복사
2. Value 기준 정렬
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
list.sort((a, b) -> b.getValue() - a.getValue()); // 내림차순 정렬
Java
복사
3. TreeMap으로 자동 정렬
Map<String, Integer> sortedMap = new TreeMap<>(map); // key 기준 오름차순 정렬
Java
복사