HashMap.get

HashMap에서 키로 값을 조회합니다. 키가 없으면 null을 반환합니다.

시그니처

V get(Object key)
반환값의미
값키가 존재하는 경우
null키가 없거나, 저장된 값이 null인 경우

동작 추적

Map<String, Integer> map = new HashMap<>();
map.put("apple", 1000);
map.put("banana", null);
[ 초기 상태 ]
map: { apple=1000, banana=null }

존재하는 키

Integer val = map.get("apple");
// val = 1000

존재하지 않는 키

Integer val = map.get("grape");
// val = null
[ 변경 후 ]
map: { apple=1000, banana=null }   ← 변화 없음 (조회만)

get은 절대 map을 변경하지 않습니다.

null 반환의 모호성

"banana" 키는 존재하지만 값이 null이고
"grape" 키는 아예 없음.
둘 다 get() 결과가 null이라 구분 불가:

map.get("banana") == null   O true
map.get("grape")  == null   O true
// 이 둘을 구분하려면 HashMap.containsKey
if (map.containsKey("banana")) {
    // 키는 있음 (값이 null일 수 있음)
}

// 또는 기본값 처리는 HashMap.getOrDefault
int count = map.getOrDefault("apple", 0);

자주 쓰는 패턴

차감 (이미 존재한다고 알 때)

Map<String, Integer> map = new HashMap<>();
map.put("mislav", 2);
map.put("stanko", 1);
[ 초기 상태 ]
map: { mislav=2, stanko=1 }
map.put("mislav", map.get("mislav") - 1);
[ 동작 ]
get("mislav") = 2
put("mislav", 2 - 1)

[ 변경 후 ]
map: { mislav=1, stanko=1 }

안전한 조회 (null 체크)

Integer val = map.get(key);
if (val != null) {
    // 사용
} else {
    // 키가 없거나 값이 null
}

// 단순히 기본값이 필요하면 HashMap.getOrDefault 한 줄 처리
int val = map.getOrDefault(key, 0);

주의: 자동 언박싱과 NullPointerException

Map<String, Integer> map = new HashMap<>();

// X 위험 — 키가 없으면 null이 int로 언박싱되며 NPE
int val = map.get("notExist");   // NullPointerException

// O 안전 — Integer로 받아 null 체크
Integer val = map.get("notExist");
if (val != null) { ... }

// O 안전 — getOrDefault
int val = map.getOrDefault("notExist", 0);

시간복잡도

평균최악
O(1)O(n) / O(log n) (Java 8+ 트리화)

CSLOG에서 보기