[JAVA8] HashMap에 getOrDefault 와 putIfAbsent 의 차이

getOrDefault : key 값이 없다면 입력시 설정한 default 값을 반환

putIfAbsent : key 값이 없다면 입력 된 key와 value 를 입력, 해당 key가 존재하면 입력 되었던 값 반환


HashMap hm = new HashMap<>();

// 1. 비어있는 HashMap에서 get 호출
System.out.println("key가 없을 때 : " + hm.get("key"));
// 결과 : key가 없을 때 : null
  
// 2. 비어있는 HashMap에서 getOrDefault 호출
System.out.println("getOrDefault() : " + hm.getOrDefault("key", "car")); 
// 결과 : getOrDefault : car
  
// 3. key, value 입력
System.out.println("putIfAbsent() : " + hm.putIfAbsent("key", "ship"));
// 결과 : putIfAbsent : null 
// 이전값이 존재하지 않기 때문에 null 반환
  
// 4. putIfAbsent으로 key, value 입력 후 동일한 key 값 재호출 
System.out.println("putIfAbsent() : " + hm.putIfAbsent("key", "bike"));
// 결과 : putIfAbsent : ship
  
System.out.println("values in map : "+hm.toString()); 
// 결과 : {key=ship}
// getOrDefault은 해당 key가 없을 경우  값을 set은 하지 않고 정해진 default 값만 리턴 하기 떄문에 car 없음
// putIfAbsent는 이미 동일한 key로 된 값이 입력되어있었기 때문에 나중에 입력한 bike로 덮어 씌워지지 않음
  
// 5. 신규 key, value 입력
System.out.println("putIfAbsent() 으로 신규 key값 입력 : "+hm.putIfAbsent("key2", "bike"));
// 결과 : putIfAbsent으로 신규 key값 입력 : null
  
// 6. 최종 값 출력
System.out.println("values in map : "+hm.toString()); 
// {key2=bike, key=ship}
refs : http://stackoverflow.com/questions/29539336/which-one-is-better-getordefault-or-putifabsent-of-hashmap-in-java

댓글

이 블로그의 인기 게시물

[JDBC] 쿼리 후에 ResultSet 에 데이터가 있는지 확인하는 방법

[Android] Android 로깅 시 isLoggable() 메서드 사용

[Spring] @PropertySource and Environment 사용시 Property 값이 null 로 들어오는 경우