티스토리 뷰
알고리즘을 풀다 보면 Map에 존재하는 key인지 아닌지 확인해야 할 때가 있다. 나는 평소에 다음과 같이 사용했었다.
기존 코드
public class Main {
public static void main(String[] args) {
String[] strArr = {
"테스트", "TEST", "테스트"
};
Map<String, Integer> map = new HashMap<>();
for(String s : strArr) {
if(map.containsKey(s))
map.put(s, map.get(s) + 1);
else
map.put(s, 1);
}
}
}
{TEST=1, 테스트=2}
위의 코드가 문제가 있는 것은 아니지만 새로운 방법이 있어 기록을 남기고자 한다.
Map - putIfAbsent()
Map 인터페이스는 putIfAbsent 메서드를 제공한다. 메서드명에서 알 수 있듯이 비어있을 시에 put 하는 메서드이다.
메서드 정의는 다음과 같다.
- key 존재 x : Map에 key와 value를 저장하고 null을 반환한다.
- key 존재 o : Map에 저장된 key의 value 값을 반환한다.
default V putIfAbsent(K key, V value) {
V v = get(key);
// Map에 해당 key가 존재하지 않는다면 해당 key를 저장한다.
if (v == null) {
v = put(key, value);
}
return v;
}
새로운 코드
Map에 저장되어 있지 않는 key라면 value값으로 0을 갖는 key-value 쌍을 저장한다. 그리고 해당 key의 value 값을 1 증가시킨다.
Map에 저장되어 있는 key라면 putIfAbsent를 건너뛰고 해당 key의 value를 1 증가시킨다.
public class Main {
public static void main(String[] args) {
String[] strArr = {
"테스트", "TEST", "테스트"
};
Map<String, Integer> map = new HashMap<>();
for(String s : strArr) {
map.putIfAbsent(s, 0);
map.put(s, map.get(s) + 1);
}
}
}
{TEST=1, 테스트=2}
기존 코드에서는 조건문을 통하여 존재하는 key인지 판별이 필요했지만 위와 같이 간단하게 작성이 가능하다.