
Map은 키-값의 쌍을 저장하는 자료구조이다. 키는 맵 내에서 유일해야 하며, 키를 통해 값을 빠르게 검색할 수 있다. 키는 중복될 수 없지만, 값은 중복될 수 있다. 또한, Map은 순서를 보장하지 않는다.
자바는 HashMap, TreeMap, LinkedHashMap 등 다양한 Map 구현체를 제공한다.
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)과 불공변성
불공변성은 제네릭 타입 간의 상속 관계가 타입과 클래스에서 다르게 동작함을 의미한다. 예를 들어,
Integer는Number의 서브클래스이지만,Map<Integer, String>과Map<Number, String>은 상속 관계가 성립하지 않는다. 따라서putAll()메서드를 사용할 때, Map<Integer, String>을 Map<Number, String>에 넣을 수 없다. 이를 해결하기 위해 와일드카드를 사용하여 제네릭의 타입을 유연하게 처리한다.
Map의 키는 중복을 허용하지 않고 순서를 보장하지 않으며, 이 부분에서 Set과 유사하다. HashSet은 HashMap의 키 부분만 따와서 만든 구조이기 때문에, Set은 Map의 키와 동일한 방식으로 작동한다. 즉, Set은 Map을 상속받는 구조라고 할 수 있다.
자바에서 Stack 클래스는 Vector라는 구시대적 자료구조를 사용하므로, Deque를 사용하도록 권장된다. Deque는 Queue와 Stack의 기능을 모두 제공하며, Queue에서는 offer와 poll을 사용하고, Stack에서는 push와 pop을 사용한다.
Collection.Queue.Deque는 다음과 같은 구조를 가진다.

Deque는 양방향 큐로, 양쪽 끝에서 데이터를 삽입하고 제거할 수 있는 자료구조이다. Deque에서의 push()와 pop()은 addFirst()와 offerFirst()로 대응되며, queue의 기능인 offer()와 poll()도 제공된다.
Map의 개념제네릭에서의 불공변성 (클래스는 공변성)Deque를 사용하여 Queue, Deque, Stack을 구현하는 이유Map과 Set의 관계: Map의 키는 Set과 유사하며, Set은 Map을 상속받는다.