자바에서 Map은 Key와 Value 쌍으로 데이터를 저장하는 자료구조. 배열이나 리스트처럼 순서대로 저장되지 않고, Key를 통해 Value에 접근할 수 있다.
가장 자주 쓰이는 Map 구현체로는 HashMap, TreeMap, LinkedHashMap 등이 있다.
Key는 중복 불가능, Value는 중복 가능
순서를 보장하지 않음 (HashMap 기준)
Key를 기반으로 데이터를 빠르게 조회
| 메서드 | 설명 |
|---|---|
put(K key, V value) | Map에 키-값 쌍을 추가 |
get(Object key) | 키에 해당하는 값 반환 |
containsKey(Object key) | 해당 키가 존재하는지 확인 |
containsValue(Object value) | 해당 값이 존재하는지 확인 |
remove(Object key) | 해당 키와 관련된 키-값 쌍 제거 |
keySet() | 모든 키를 Set으로 반환 |
values() | 모든 값들을 Collection으로 반환 |
entrySet() | 키-값 쌍을 Set<Map.Entry>로 반환 |
clear() | 모든 항목 제거 |
isEmpty() | 비어있는지 확인 |
size() | 크기 확인 |
순서 보장 X
가장 빠른 성능
대부분의 경우 사용
Map<String, Integer> map = new HashMap<>();
map.put("apple", 3);
map.put("banana", 5);
System.out.println(map.get("apple")); // 3
입력 순서 유지
HashMap보다 약간 느리지만 순서가 필요할 때 유용
Map<String, Integer> map = new LinkedHashMap<>();
map.put("one", 1);
map.put("two", 2);
map.put("three", 3);
System.out.println(map); // {one=1, two=2, three=3}
Key 기준으로 정렬 (오름차순)
NavigableMap, SortedMap 인터페이스 구현
Map<String, Integer> map = new TreeMap<>();
map.put("banana", 2);
map.put("apple", 5);
map.put("cherry", 3);
System.out.println(map); // {apple=5, banana=2, cherry=3}
for (String key : map.keySet()) {
System.out.println("key: " + key + ", value: " + map.get(key));
}
// 또는 entrySet 사용
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
HashMap은 null key 1개, null value 여러 개 허용
TreeMap은 null key 허용 ❌ (정렬 시 NullPointerException 발생)
멀티스레드 환경에서는 ConcurrentHashMap 사용 권장