개발쿠키

[Java]Map getOrDefault 본문

개발/java

[Java]Map getOrDefault

쿠키와개발 2023. 6. 27. 22:48

getOrDefault


프로그래머스 문제를 푸는 중 getOrDefault라는 api를 접했다. 해당 api는 Java 8 에서 추가된 Collection API 중 하나이다.

Map에 추가된 API로 아래 코드와 같이 구현되어 있다. 

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

1. 임시변수 v를 선언한 후 get(Key)를 통해 얻은 값을 저장한 후 null이 아닌지를 확인한다. 

2. contains(key)를 통해서 해당 키가 존재하는지 다시 한번 확인

3. 둘 다 false일 경우 파라미터로 넘긴 defaultValue가 return 되고 만약 true일 경우 v 즉 get(key) 한 값이 return 된다.


예제 코드

String[] strArr = {"A", "a", "B","b","C","C"};
HashMap<String, Integer> map = new HashMap<>();

for (String s: strArr) {
    map.put(s, map.getOrDefault(s, 0) + 1);
}

System.out.println("===" + map);
//{A=1, a=1, B=1, b=1, C=2}

foreach문을 순차적으로 돌면서 보자 

1번째 - map.put("A", map.getOrDefault("A",0) + 1) = A라는 키 값을 put 하기전 getOrDefault를 통해 A의 값과 키를 확인한 후 없기 때문에 0을 retrun 한 후 +1을 하기 때문에 "A" : 1 이라는 key-value가 들어간다. \

 

2번째 -  map.put("a", map.getOrDefault("a",0) + 1) = 1번째와 동일하게 a라는 키 값이 존재하지 않았기 때문에 0을 return 후 +1 된 value가 들어간다. 

 

위와같이 돌면 최종적으로  {A=1, a=1, B=1, b=1, C=2}라는 key-value 쌍들이 들어가게 된다.

 

참고 - https://woodadada16.tistory.com/14

'개발 > java' 카테고리의 다른 글

[JAVA]클래스, 객체, 인스턴스  (0) 2023.07.20
[JAVA]Call By Reference, Call By Value  (0) 2023.07.14
[JAVA]JVM  (0) 2023.07.06
[JAVA]String  (0) 2023.07.04
[JAVA]JVM, JRE, JDK  (0) 2023.07.03