Java의 Map은 데이터를 Key-Value 형태로 저장하며 다양한 유용한 메서드를 제공합니다. 특히 고급 메서드를 사용하면 Map을 보다 효율적으로 관리하고 조작할 수 있습니다. 이번 섹션에서는 containsKey(), containsValue()로 키와 값의 존재 여부를 확인하는 방법, keySet(), values(), entrySet()을 사용한 Map 순회, 그리고 replace(), compute(), merge()와 같은 최신 메서드의 활용법을 설명하겠습니다. 적절한 Java 예제 코드를 통해 각 기능을 이해하고 활용해 보세요.
containsKey(), containsValue()로 키와 값 존재 여부 확인
containsKey()와 containsValue()는 특정 Key 또는 Value가 Map에 존재하는지 확인하는 데 사용됩니다. containsKey(key)는 지정된 key가 Map에 있으면 true를 반환하고, containsValue(value)는 지정된 value가 Map에 있으면 true를 반환합니다.
예제 코드
import java.util.HashMap;
import java.util.Map;
public class ContainsExample {
public static void main(String[] args) {
Map<String, Integer> studentScores = new HashMap<>();
studentScores.put("Alice", 85);
studentScores.put("Bob", 92);
System.out.println("Contains key 'Alice': " + studentScores.containsKey("Alice")); // true
System.out.println("Contains value 92: " + studentScores.containsValue(92)); // true
System.out.println("Contains key 'Charlie': " + studentScores.containsKey("Charlie")); // false
}
}
containsKey()와 containsValue()는 데이터를 검색하거나 특정 조건을 만족하는지 확인할 때 유용합니다. 예를 들어, 유저의 아이디가 이미 등록되어 있는지 확인하거나 특정 점수가 존재하는지 확인할 수 있습니다.
keySet(), values(), entrySet()을 통한 순회
Map의 모든 Key나 Value를 순회하려면 keySet(), values(), entrySet() 메서드를 사용할 수 있습니다. keySet()은 모든 Key를 반환하고, values()는 모든 Value를 반환하며, entrySet()은 Key-Value 쌍을 각각 Entry 객체로 반환합니다. 이들은 Map의 데이터를 효율적으로 순회하고 처리할 때 사용됩니다.
예제 코드
import java.util.HashMap;
import java.util.Map;
public class MapIterationExample {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 85);
scores.put("Bob", 92);
scores.put("Charlie", 78);
// keySet()을 사용한 키 순회
System.out.println("Keys:");
for (String key : scores.keySet()) {
System.out.println(key);
}
// values()를 사용한 값 순회
System.out.println("Values:");
for (Integer value : scores.values()) {
System.out.println(value);
}
// entrySet()을 사용한 Key-Value 쌍 순회
System.out.println("Entries:");
for (Map.Entry<String, Integer> entry : scores.entrySet()) {
System.out.println(entry.getKey() + " - " + entry.getValue());
}
}
}
keySet(), values(), entrySet()을 통해 쉽게 데이터를 확인하고 처리할 수 있어, 조건에 따른 데이터 가공이나 전체 데이터를 출력할 때 유용합니다.
replace(), compute(), merge()와 같은 최신 메서드 활용
Java 8부터 Map에는 replace(), compute(), merge()와 같은 메서드가 추가되었습니다. 이 메서드들은 Map의 값을 효율적으로 업데이트하거나 조건에 따라 값을 수정하는 데 유용합니다.
replace() 메서드
replace(key, newValue)는 주어진 Key가 존재할 때 해당 값을 newValue로 교체합니다. replace(key, oldValue, newValue)는 기존 값이 oldValue와 같을 때만 새로운 값으로 대체합니다.
import java.util.HashMap;
import java.util.Map;
public class ReplaceExample {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 85);
scores.put("Bob", 92);
// Alice의 점수 업데이트
scores.replace("Alice", 90);
System.out.println("Updated Alice's Score: " + scores);
// 특정 조건에 따라 교체
scores.replace("Bob", 92, 95);
System.out.println("Conditionally Updated Bob's Score: " + scores);
}
}
compute() 메서드
compute(key, (k, v) -> newValue)는 Key에 매핑된 값을 계산하여 업데이트할 때 사용됩니다. 기존 값을 기반으로 연산이 필요할 때 유용하며, BiFunction을 인자로 받아 기존 Key와 Value에 따라 계산된 새 값을 Map에 저장합니다.
import java.util.HashMap;
import java.util.Map;
public class ComputeExample {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 85);
scores.put("Bob", 92);
// Alice의 점수를 5만큼 증가
scores.compute("Alice", (k, v) -> (v == null) ? 0 : v + 5);
System.out.println("Computed Alice's Score: " + scores);
// 새로운 Key-Value 추가
scores.compute("Charlie", (k, v) -> (v == null) ? 80 : v + 5);
System.out.println("Computed Charlie's Score: " + scores);
}
}
merge() 메서드
merge(key, value, (oldValue, newValue) -> result)는 지정된 Key에 대해 값이 존재하지 않으면 값을 추가하고, 존재하면 기존 값과 새 값을 병합합니다. 주로 값을 누적하거나 조건에 따라 병합할 때 사용됩니다.
import java.util.HashMap;
import java.util.Map;
public class MergeExample {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 85);
// Alice의 점수를 10 증가
scores.merge("Alice", 10, Integer::sum);
System.out.println("Merged Alice's Score: " + scores);
// 새 학생 점수 추가
scores.merge("Bob", 78, Integer::sum);
System.out.println("Merged Bob's Score: " + scores);
}
}
replace(), compute(), merge()는 특정 조건에 맞춰 값 업데이트를 효율적으로 처리할 수 있어 데이터 변환이나 Map의 데이터 관리가 중요한 상황에서 유용합니다.
참고사이트
'JAVA' 카테고리의 다른 글
[JAVA] Map 동기화 멀티스레딩 (2) | 2024.11.05 |
---|---|
[JAVA] Map 성능 최적화와 메모리 관리 (0) | 2024.11.05 |
[JAVA] Map Java8 이상의 기능과 메서드 (0) | 2024.11.05 |
[JAVA] Map 반복문과 순회 방법 (0) | 2024.11.05 |
[JAVA] Map 기본 사용법 (0) | 2024.11.02 |
[JAVA] Map 인터페이스와 구현체 (1) | 2024.11.02 |
[JAVA] Map 개요 (0) | 2024.11.02 |
[JAVA] Lombok 성능 최적화와 메모리 관리 (0) | 2024.11.02 |