티스토리 뷰

 

알고리즘을 풀다 보면 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인지 판별이 필요했지만 위와 같이 간단하게 작성이 가능하다.

Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30