Simple&Natural

computeIfAbsent() vs putIfAbsent() 본문

언어/Java&Kotlin

computeIfAbsent() vs putIfAbsent()

Essense 2020. 3. 20. 01:55
728x90

반환값의 차이 외에는 비슷한 기능을 수행하는 것 같지만 매우 중요한 차이점이 하나 있다.

바로 키가 없는 경우 computeIfAbsent은 계산 된 값을 반환하고, putIfAbsent은 null을 반환한다는 것이다. 

(키가 이미 있다면 둘다 기존의 값을 그대로 출력한다)

 

소스코드로 살펴보자

 

출력값은 null

 

 

 

출력값은 2

 

전자의 경우 null을 출력하는 반면,

후자의 경우 2를 출력한다.

 

비슷한 기능으로 생각하고 전자를 쓰면 nullPointerException을 마주할 수도 있으니 주의하여 사용하여야 한다.

 

 

 

 

 

참고자료)

https://www.it-swarm.dev/ko/java/java-8-%EB%A7%B5%EC%97%90%EC%84%9C-putifabsent%EC%99%80-computeifabsent%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C/836495279/

 

java — Java 8 맵에서 putIfAbsent와 computeIfAbsent의 차이점은 무엇입니까?

Map 가 있다고 가정하십시오. map.putIfAbsent("key", new ValueClass()); "키"키가 이미 ValueClass에 있더라도 Map 인스턴스를 생성합니다. 이것은 불필요한 인스턴스를 만듭니다. 반면에 map.computeIfAbsent("key", k -> new ValueClass()); "키"키가 ValueClass에 없거나 Map 값에 매핑 된 경우에만 null 인스턴스를 생성합니다. 따라서 computeIfAbsent이

www.it-swarm.dev

 

728x90

'언어 > Java&Kotlin' 카테고리의 다른 글

코틀린 SAM 인터페이스의 람다식 관련  (0) 2020.04.08
Kotlin의 null처리  (0) 2020.03.20
코틀린의 캡슐화  (0) 2020.03.19
자바에서 hashcode, identityHashcode, equals, == 연산자의 비교  (0) 2020.03.16
for문 조건  (0) 2020.02.26