Java의 Map 인터페이스는 키-값(Key-Value) 쌍으로 데이터를 저장하는 자료구조입니다.
배열이나 리스트와 달리 고유한 키를 기반으로 데이터를 빠르게 검색할 수 있습니다.
특징
Java에서 Map 인터페이스를 구현한 대표적인 클래스는 다음과 같습니다.
| 구현체 | 특징 |
|---|---|
HashMap | 빠른 검색 속도, 순서 보장 안 됨 |
LinkedHashMap | 입력 순서 유지 |
TreeMap | Key 기준 정렬 (오름차순) |
Hashtable | 동기화 지원 (멀티스레드 환경) |
| 메서드 | 설명 |
|---|---|
put(K key, V value) | Key-Value 추가 |
get(K key) | Key에 해당하는 Value 반환 |
remove(K key) | Key-Value 삭제 |
containsKey(K key) | 해당 Key 존재 여부 확인 |
containsValue(V value) | 해당 Value 존재 여부 확인 |
size() | 저장된 Key-Value 개수 반환 |
isEmpty() | 비어있는지 확인 |
keySet() | 모든 Key를 Set으로 반환 |
values() | 모든 Value를 Collection으로 반환 |
entrySet() | 모든 Key-Value를 Set으로 반환 |
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
// 데이터 추가
scores.put("Alice", 90);
scores.put("Bob", 85);
scores.put("Charlie", 88);
// 데이터 조회
System.out.println("Alice의 점수: " + scores.get("Alice")); // 90
// Key 존재 여부 확인
System.out.println("Bob이 존재하는가? " + scores.containsKey("Bob")); // true
// 데이터 삭제
scores.remove("Charlie");
// 전체 데이터 출력
for (Map.Entry<String, Integer> entry : scores.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
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("C", 3);
map.put("A", 1);
map.put("B", 2);
System.out.println(map); // {C=3, A=1, B=2} (입력 순서 유지)
}
}
import java.util.TreeMap;
import java.util.Map;
public class TreeMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new TreeMap<>();
map.put("C", 3);
map.put("A", 1);
map.put("B", 2);
System.out.println(map); // {A=1, B=2, C=3} (Key 기준 오름차순 정렬)
}
}
기본적으로 HashMap은 멀티스레드 환경에서 안전하지 않음
멀티스레드 환경에서는 ConcurrentHashMap을 사용하는 것이 좋음
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class SynchronizedMapExample {
public static void main(String[] args) {
Map<String, Integer> map = Collections.synchronizedMap(new HashMap<>());
map.put("A", 1);
map.put("B", 2);
System.out.println(map);
}
}
import java.util.concurrent.ConcurrentHashMap;
import java.util.Map;
public class ConcurrentHashMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new ConcurrentHashMap<>();
map.put("A", 1);
map.put("B", 2);
System.out.println(map);
}
}
Map은 Java에서 빠른 데이터 조회를 위해 필수적인 자료구조입니다.
특히 HashMap은 가장 많이 사용되지만 순서가 중요할 경우 LinkedHashMap, 정렬이 필요하면 TreeMap을 고려해야 합니다.
멀티스레드 환경에서는 ConcurrentHashMap을 활용하는 것이 성능과 안정성 측면에서 유리하다는 점을 다시 한 번 정리할 수 있었습니다.