언어/자바
[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); // 알파벳 순 정렬