지금까지 배운 List 와 Set 은 값 하나씩 저장했습니다.
List : [철수, 영희, 민준]
Set : {철수, 영희, 민준}
Map 은 다릅니다. 키(Key) 와 값(Value) 을 쌍으로 저장합니다.
Map : {철수 → 90점, 영희 → 85점, 민준 → 92점}
↑ 키 ↑ 값
사전을 떠올리면 이해하기 쉽습니다.
사전 : "apple" → "사과"
"banana" → "바나나"
"cherry" → "체리"
Map 도 같은 구조 : 키(단어) → 값(뜻)
Collection (인터페이스)
|
├── List (인터페이스)
│ ├── ArrayList
│ ├── LinkedList
│ ├── Vector
│ └── ...
│
├── Set (인터페이스)
│ ├── HashSet
│ ├── LinkedHashSet
│ ├── TreeSet
│ └── ...
Map (인터페이스) ← Collection 과 별개로 존재
├── HashMap
├── LinkedHashMap
└── TreeMap
예시:
map.put("철수", 90);
map.put("영희", 90); // 값이 같아도 키가 다르면 OK
map.put("철수", 95); // 키가 같으면 값이 덮어씌워짐 → 철수 = 95
package collection.map;
import java.util.HashMap;
import java.util.Map;
public class MapEx {
public static void main(String[] args) {
// 학생이름, 점수
Map<String, Integer> scores = new HashMap<>();
// 추가 (put)
scores.put("철수", 90);
scores.put("영희", 85);
scores.put("민준", 92);
// 조회 (get)
System.out.println(scores.get("철수")); // 90 - 키값으로 접근하면 value 가 나옴
System.out.println(scores.get("없는값")); // null
// 포함 여부
System.out.println(scores.containsKey("영희")); // 키 값이 존재한다면 true
System.out.println(scores.containsValue(85)); // 있는 값 true
System.out.println(scores.containsValue(10)); // 없는 값 false
// 삭제
scores.remove("민준");
// 크기
scores.size();
// put() 은 덮어씌우기도 합니다.
scores.put("철수", 0); // 덮어 쓰기 됨
System.out.println(">>>" + scores.keySet());
System.out.println(scores);
for (String name : scores.keySet()) {
System.out.println(name + " : " + scores.get(name) + " 점수");
}
} // end of main
} // end of class
map 인터페이스를 어떻게 쓰는지 보여주고 있다.
Map 인터페이스
키(Key) 와 값(Value) 을 쌍으로 저장
키는 중복 불가, 값은 중복 허용
키로 값을 빠르게 찾을 수 있음
HashMap 주요 메서드
put(키, 값) : 추가 또는 덮어쓰기
get(키) : 키로 값 조회, 없으면 null
remove(키) : 삭제
containsKey(키) : 키 존재 여부
containsValue(값) : 값 존재 여부
keySet() : 전체 키 목록
size() : 저장된 쌍의 수
언제 쓰나요?
"이름으로 성적을 찾고 싶다"
"단어로 뜻을 찾고 싶다"
키로 값을 빠르게 찾아야 하는 모든 상황