Map 인터페이스는 키(Key)와 값(Value)로 구성된 객체를 저장하는 구조이다. Map의 특징으로 키는 중복 저장이 안되고, 값은 중복 저장이 가능하다. 만약 기존에 저장된 키와 동일한 키로 값을 저장할 경우 새로운 값으로 변경된다.
Map 인터페이스를 구현한 클래스로 HashMap, HashTable, TreeMap, SortedMap 등이 있다.

Map 인터페이스는 구조상의 이유로 컬렉션 인터페이스와 별도로 정의되어 있는데 그로 인해 주요 메서드가 조금씩 차이가 있다.
| 메서드 | 타입 | 설명 |
|---|---|---|
| put(Object key, Object Value) | Object | 주어진 키로 값을 저장 새로운 키는 null을 리턴하고 동일한 키는 값을 대체하고 이전값 리턴 |
| containsKey(Object key) / containsValue(Object Value | boolean | 주어진 키 또는 값이 있으면 true, 없으면 false를 리턴 |
| get(Object key) | Object | 주어진 키에 해당하는 값을 리턴 |
| isEmpty() | boolean | 컬렉션이 비어 있는지 여부 리턴 |
| keySet() | Set | 모든 키를 Set에 담아서 리턴 |
| entrySet() | Set | 키와 값의 쌍으로 구성된 모든 객체를 Set에 담아서 리턴 |
| size() | int | 저장된 키-값 쌍의 총 갯수를 리턴 |
| clear() | void | 모든 키와 값을 삭제 |
| remove() | remove(Object key) | 주어진 키와 일치하는 객체를 삭제하고 값을 리턴 |
// HashMap 기본 생성
Map<Key, Value> map = new HashMap<Key, Value>(); // HashMap 생성
Map<String, Integer> map = new HashMap<>(); // 키에 문자열 타입, 값에 정수 타입으로 지정
HashMap은 해시 함수를 통해 '키'와 '값'이 저장되는 위치를 결정하므로, 사용자는 그 위치를 알 수 없고, 삽입되는 순서와 위치도 관계가 없다.
Map<String, Integer> map = new HashMap<>();
// 객체 저장
map.put("Jan", 1);
map.put("Feb", 2);
map.put("Mar", 3);
map.put("Apr", 4);
System.out.println(map.size()); // 출력 : 객체 총 개수 (4)
System.out.println(map.get(Feb)); // 출력 : Feb의 값 (2)
//전체 출력
Set<String> keySet = map.keySet(); // keySet 메서드를 이용해 모든 key 담기
Iterator<String> it = keySet.iterator();
while(it.hasMoreNext()) {
String key = it.next();
Integer value = map.get(key);
System.out.println(key + " : " + value);
}
/* 출력 :
Jan : 1
Feb : 2
Mar : 3
Apr : 4
*/
map.remove("Jan"); // 객체 삭제
map.clear(); // 전체 객체 삭제
Map은 키와 값을 쌍으로 저장하기 때문에 iterator() 메서드를 직접 호출할 수 없다. 그래서 keySet() 이나 entrySet() 메서드를 이용해 Set 형태로 변환해 호출해야 한다.