Map은 Java Collection Framework의 주요 구성 요소로, 키(Key)와 값(Value)의 쌍으로 데이터를 저장하는 자료 구조입니다. Key를 사용해 Value에 빠르게 접근할 수 있어 검색이 자주 필요한 경우 유용합니다. 이때, Key는 고유해야 하며 Value는 중복이 가능합니다.
Java Collection Framework에서 Map은 List나 Set과 다르게 단일 값이 아닌 Key-Value 형태로 데이터를 다루는 특징이 있습니다. 이러한 구조 덕분에 HashMap이나 TreeMap처럼 빠른 검색 성능을 제공하며 다양한 사용 사례에 적합합니다.
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
Map<String, Integer> studentAges = new HashMap<>();
studentAges.put("Alice", 23);
studentAges.put("Bob", 21);
studentAges.put("Charlie", 22);
System.out.println("Alice's Age: " + studentAges.get("Alice"));
}
}
Java Collection Framework에서 Map의 위치
Map 인터페이스는 Java의 Collection Framework에 포함되어 있지만 Collection 인터페이스를 상속받지는 않습니다. Map은 List나 Set과는 달리 키와 값을 한 쌍으로 다루기 때문에, 독립적인 역할을 수행합니다. 특히 HashMap, TreeMap, LinkedHashMap 등의 다양한 구현체가 제공되어 요구 사항에 따라 최적의 Map을 선택할 수 있습니다.
- HashMap: 가장 많이 사용되는 Map 구현체로, 해시 알고리즘을 사용해 빠른 접근과 삽입 속도를 제공합니다.
- TreeMap: 정렬된 순서로 Key-Value를 저장하며, Red-Black Tree로 구현되어 있어 순서가 중요한 경우에 유리합니다.
- LinkedHashMap: 입력 순서를 유지하는 특징이 있어, 순서가 중요한 데이터를 다룰 때 사용됩니다.
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.TreeMap;
public class MapTypesExample {
public static void main(String[] args) {
// HashMap
Map<String, String> hashMap = new HashMap<>();
hashMap.put("a", "Apple");
hashMap.put("b", "Banana");
System.out.println("HashMap: " + hashMap);
// TreeMap
Map<String, String> treeMap = new TreeMap<>();
treeMap.put("c", "Cherry");
treeMap.put("a", "Apple");
System.out.println("TreeMap: " + treeMap);
// LinkedHashMap
Map<String, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("d", "Date");
linkedHashMap.put("c", "Cherry");
System.out.println("LinkedHashMap: " + linkedHashMap);
}
}
Map의 장점과 사용 사례
Map은 키로 값을 빠르게 검색할 수 있어 데이터 조회가 자주 필요한 경우 성능이 뛰어납니다. 예를 들어 전화번호부와 같은 이름-번호 구조나 학생 성적과 같은 ID-점수 데이터를 다룰 때 유용합니다. 또한, 중복된 값을 허용하지만 Key는 고유해야 하므로, 고유한 키를 필요로 하는 애플리케이션에서 필수적입니다.
사용 사례
- 전화번호부 관리: 이름을 통해 전화번호를 빠르게 조회할 수 있습니다.
- 캐시 데이터 관리: 해시를 기반으로 빠르게 접근할 수 있는 HashMap을 통해 데이터 캐싱 시스템 구현이 가능합니다.
- 웹 애플리케이션의 세션 관리: 사용자 ID와 세션 데이터를 키-값 형태로 저장해 관리합니다.
import java.util.HashMap;
import java.util.Map;
public class PhoneBook {
private Map<String, String> phoneBook = new HashMap<>();
public void addContact(String name, String phoneNumber) {
phoneBook.put(name, phoneNumber);
}
public String getPhoneNumber(String name) {
return phoneBook.get(name);
}
public static void main(String[] args) {
PhoneBook phoneBook = new PhoneBook();
phoneBook.addContact("Alice", "123-456-7890");
phoneBook.addContact("Bob", "987-654-3210");
System.out.println("Alice's Phone Number: " + phoneBook.getPhoneNumber("Alice"));
}
}
다양한 Map 예제
특정 조건에 맞는 키-값 쌍 필터링
Map은 스트림을 활용해 특정 조건에 맞는 데이터를 쉽게 필터링할 수 있습니다.
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class MapFilterExample {
public static void main(String[] args) {
Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 23);
ages.put("Bob", 20);
ages.put("Charlie", 22);
Map<String, Integer> filteredMap = ages.entrySet().stream()
.filter(entry -> entry.getValue() > 21)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println("Filtered Map: " + filteredMap);
}
}
값 업데이트 및 기본 값 제공
import java.util.HashMap;
import java.util.Map;
public class MapDefaultExample {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 85);
int bobScore = scores.getOrDefault("Bob", 70);
System.out.println("Bob's Score (default 70): " + bobScore);
}
}
Map의 요소를 모두 출력하기
import java.util.HashMap;
import java.util.Map;
public class MapPrintExample {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 95);
scores.put("Bob", 80);
for (Map.Entry<String, Integer> entry : scores.entrySet()) {
System.out.println("Student: " + entry.getKey() + ", Score: " + entry.getValue());
}
}
}
참고사이트
'JAVA' 카테고리의 다른 글
[JAVA] Map 반복문과 순회 방법 (0) | 2024.11.05 |
---|---|
[JAVA] Map 메서드 활용 (0) | 2024.11.05 |
[JAVA] Map 기본 사용법 (0) | 2024.11.02 |
[JAVA] Map 인터페이스와 구현체 (1) | 2024.11.02 |
[JAVA] Lombok 성능 최적화와 메모리 관리 (0) | 2024.11.02 |
[JAVA] Lombok 커스텀 애너테이션(어노테이션) 생성 및 활용 (0) | 2024.10.31 |
[JAVA] Lombok 조건부 애너테이션, 어노테이션 (0) | 2024.10.31 |
[JAVA] Lombok 로깅 처리 (@Slf4j, @Log 등) (0) | 2024.10.31 |