본문으로 건너뛰기
김신건의 로그

[Java] Map

· 수정 · 📖 약 1분 · 381자/단어 #java #collection #map #interface
Map, java.util.Map, Java Map, Map interface, 맵

정의

java.util.Map<K,V>key 와 value 의 쌍으로 데이터를 저장 하는 자료구조의 인터페이스. 하나의 key 에는 하나의 value 만 매핑, 중복 key 는 허용하지 않는다.

MapCollection 을 extends 하지 않는다 (key-value 쌍 의미가 단일 원소와 다르므로). 그래도 keySet(), values(), entrySet() 을 통해 Collection 인터페이스의 view 를 제공.

핵심 메서드

메서드의미
put(K, V)매핑 추가 또는 갱신, 이전 값 반환
get(Object)key 로 value 조회, 없으면 null
getOrDefault(Object, V)없으면 기본값
containsKey(Object)key 존재 여부
containsValue(Object)value 존재 여부 (보통 O(n))
remove(Object)key 제거
size(), isEmpty()크기
keySet(), values(), entrySet()view 들

Java 8+ 의 기본 메서드

map.putIfAbsent(key, value);
map.computeIfAbsent(key, k -> expensive(k));
map.computeIfPresent(key, (k, v) -> v + 1);
map.compute(key, (k, v) -> v == null ? 1 : v + 1);
map.merge(key, 1, Integer::sum);
map.replace(key, oldVal, newVal);

구현체 한눈에

구현순서thread-safenull 허용백킹
HashMap없음key 1, value 다수해시 테이블
LinkedHashMap삽입 순서 또는 접근 순서key 1, value 다수해시 + linked list
TreeMap정렬 (Comparable / Comparator)value 다수, key 는 null 비허용Red-Black Tree
Hashtable (legacy)없음✓ (메서드)둘 다 비허용해시
ConcurrentHashMap없음✓ (bin-level)둘 다 비허용해시 + CAS + sync
**[[Spring] ConcurrentReferenceHashMap]]없음비허용해시 + Weak/Soft ref
EnumMapenum 정의 순서value 다수배열
IdentityHashMap없음다수== 비교
WeakHashMap없음다수key 약참조

불변 Map (Java 9+)

Map<String, Integer> ages = Map.of("Alice", 30, "Bob", 25);
Map<String, Integer> more = Map.ofEntries(
    Map.entry("a", 1),
    Map.entry("b", 2)
);

10개 이상이거나 일관성 있게 표현하려면 ofEntries.

entrySet 순회가 가장 효율적

// ❌ 비효율 (key 로 다시 get)
for (String k : map.keySet()) {
    System.out.println(k + "=" + map.get(k));
}

// ✓ entrySet 직접 순회 (해시 lookup 1번)
for (Map.Entry<String, Integer> e : map.entrySet()) {
    System.out.println(e.getKey() + "=" + e.getValue());
}

// ✓ Java 8+ forEach
map.forEach((k, v) -> System.out.println(k + "=" + v));

동기화 옵션

Map<K, V> sync = Collections.synchronizedMap(new HashMap<>());
Map<K, V> concurrent = new ConcurrentHashMap<>();  // 권장

ConcurrentHashMap 이 거의 항상 더 빠르다.

참고

이 글의 용어 (8개)
[Java] Collectionjava
정의 는 그룹으로 묶인 객체들을 표현하는 최상위 인터페이스. JCF (Java Collections Framework) 의 입구이자, / / / 모두 이를 확장한다. 자체는 직접…
[Java] ConcurrentHashMapjava
정의 는 고동시성 환경에서 사용 가능한 구현. JSR-166 (Java 5) 도입, Java 8 에서 내부 구조가 크게 재작성됐다. 과 같은 인터페이스를 제공하면서 thread-…
[Java] Fail-Fast Iteratorjava
정의 Fail-Fast Iterator 는 순회 도중 컬렉션의 구조가 변경되면 즉시 을 던지는 iterator. , , 등 대부분의 컬렉션의 iterator 가 이 방식. 목적은…
[Java] HashMapjava
정의 는 해시 테이블 로 구현된 . 평균 O(1) 의 put/get/remove 를 보장하고 단일 스레드 환경의 사실상 표준. JDK 1.2 도입, Java 8 에서 충돌 시 l…
[Java] Iterablejava
정의 는 루프로 순회 가능한 모든 타입의 최상위 인터페이스. 단 하나의 추상 메서드, 를 정의한다. 인터페이스가 을 extends 하므로 , , , 등 모든 컬렉션이 자동으로 대…
[Java] LinkedHashMapjava
정의 는 을 상속해 삽입 순서 (또는 접근 순서) 를 유지 하는 Map. 모든 의 평균 O(1) 성능을 유지하면서 추가로 순회 순서가 일관된다. 핵심: 이중 연결 리스트 (dou…
[Java] Objectjava
정의 는 Java 의 모든 클래스의 최상위 부모 (root) 클래스. 가 명시되지 않은 클래스는 컴파일러가 자동으로 를 붙인다. 인터페이스는 클래스가 아니라 를 직접 상속하지는 …
[Java] TreeMapjava
정의 는 Red-Black Tree 기반의 정렬된 . (확장 인터페이스) 을 구현해 범위 쿼리, floor/ceiling, sub-map 같은 정렬 기반 연산을 제공한다. key…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기