Language/Java

[Java] Map - getOrDefault()

anxi 2024. 4. 14. 17:38

최근 프로그래머스를 풀던 중 모르는 메서드가 있었다,,

(https://school.programmers.co.kr/learn/courses/30/lessons/42576)

 

for (String c : completion) {
      hashMap.put(c, hashMap.getOrDefault(c, 0) + 1);
}


바로 "getOrDefault()" 메서드이다.

 

getOrDefault(Object key, V defaultValue)

 

자바 공식 문서에서는 위와 같이 설명하고 있다.

 

아래 코드는 Map 인터페이스에 구현된 default 코드이다.

default V getOrDefault(Object key, V defaultValue) {
        V v;
        return (((v = get(key)) != null) || containsKey(key))
            ? v
            : defaultValue;
}

 

위의 정보들로 정리해보면 다음과 같다.

  • map에 key가 존재할 경우, 구체적인 key와 매핑되는 값(value)을 반환한다.
  • map에 key가 존재하지 않으면, defaultValue를 반환한다.

적용

for (String c : completion) {
      hashMap.put(c, hashMap.getOrDefault(c, 0) + 1);
}

 

위 코드에 대한 정보는,

  • completion 배열에 있는 각 요소를 map에 넣는데
    • map에 중복되는 key가 있으면, 그 key에 해당하는 값에 1을 더한다.
    • map에 중복되는 key가 없으면, 첫 등장한 것이므로 1을 넣는다.

 

 

위 정보를 바탕으로 코드를 이해해보면,

 

  • key : completion 배열의 값
  • value : 
    • key가 존재할 경우 : 현재 map에 존재하는 c의 값의 1을 더한다.
    • key가 존재하지 않을 경우 : 0에 1을 더한다.

 

결론

  • 중복되는 key에 value에 특정 숫자를 더해주거나 빼줄 때 이용하면 용이할 것 같다.