[김영한의 실전 자바 중급편2] - Collection - Map, Deque, Queue, Stack

jkky98·2024년 6월 14일

Java

목록 보기
31/51

Map

Map키-값의 쌍을 저장하는 자료구조이다. 는 맵 내에서 유일해야 하며, 를 통해 을 빠르게 검색할 수 있다. 는 중복될 수 없지만, 은 중복될 수 있다. 또한, Map은 순서를 보장하지 않는다.

자바는 HashMap, TreeMap, LinkedHashMap 등 다양한 Map 구현체를 제공한다.

Map Interface 주요 Method

  • put(K key, V value): 지정된 키와 값을 맵에 저장한다. 만약 이미 같은 키가 존재한다면 이전 값을 새로운 값으로 대체한다.
  • putAll(Map<? extends K, ? extends V> m): 다양한 타입의 맵을 인자로 받아 현재 맵에 복사한다.
  • putIfAbsent(K key, V value): 키가 없을 경우에만 값을 저장한다.
  • get(Object key): 키에 연결된 값을 반환한다.
  • getOrDefault(Object key, V defaultValue): 키가 없을 경우 기본값을 반환한다.
  • remove(Object key): 키와 그 값을 제거하고 반환한다.
  • clear(): 모든 키와 값을 제거한다.
  • containsKey(Object key): 지정된 키가 있는지 확인한다.
  • containsValue(Object value): 값이 있는지 확인한다.
  • keySet(): 모든 키를 반환한다.
  • values(): 모든 값을 반환한다.
  • size(): 키-값 쌍의 개수를 반환한다.
  • entrySet(): 모든 키-값 쌍을 반환한다.
  • isEmpty(): 맵이 비어 있는지 확인한다.

putAll(Map<? extends K, ? extends V> m)과 불공변성

불공변성제네릭 타입 간의 상속 관계가 타입클래스에서 다르게 동작함을 의미한다. 예를 들어, IntegerNumber의 서브클래스이지만, Map<Integer, String>Map<Number, String>은 상속 관계가 성립하지 않는다. 따라서 putAll() 메서드를 사용할 때, Map<Integer, String>Map<Number, String>에 넣을 수 없다. 이를 해결하기 위해 와일드카드를 사용하여 제네릭의 타입을 유연하게 처리한다.

Map vs Set

Map는 중복을 허용하지 않고 순서를 보장하지 않으며, 이 부분에서 Set과 유사하다. HashSetHashMap키 부분만 따와서 만든 구조이기 때문에, SetMap의 키와 동일한 방식으로 작동한다. 즉, SetMap을 상속받는 구조라고 할 수 있다.

Stack, Queue

자바에서 Stack 클래스는 Vector라는 구시대적 자료구조를 사용하므로, Deque를 사용하도록 권장된다. DequeQueueStack의 기능을 모두 제공하며, Queue에서는 offerpoll을 사용하고, Stack에서는 pushpop을 사용한다.

Deque

Collection.Queue.Deque는 다음과 같은 구조를 가진다.

Deque는 양방향 큐로, 양쪽 끝에서 데이터를 삽입하고 제거할 수 있는 자료구조이다. Deque에서의 push()pop()addFirst()offerFirst()로 대응되며, queue의 기능인 offer()poll()도 제공된다.

정리

  • Map의 개념
  • 제네릭에서의 불공변성 (클래스는 공변성)
  • Deque를 사용하여 Queue, Deque, Stack을 구현하는 이유
  • MapSet의 관계: Map의 키는 Set과 유사하며, SetMap을 상속받는다.
profile
자바집사의 거북이 수련법

0개의 댓글