01) Map 이란
Map은 키-값 쌍으로 이루어져 있는 자료구조이다. (예를 들면 "홍길동의 전화번호"에서 "홍길동"을 키로 생각하고 "전화번호"를 값으로 생각할 수 있다.) 대부분의 데이터는 이름과 전화번호의 관계처럼 어떤 연관성을 가지고 있는데, 이를 쉽게 표현할 수 있는 자료형이 키-값을 가지는 HashMap이다.
Map은 순서를 따지지 않기 때문에 List처럼 특성 위치의 데이터를 가져다가 사용할 수 없다.
대신 키를 알고 있다면 그 키를 통해 값을 가져오는 방법을 사용한다.
// map을 생성하는 문법
Map<KeyType, ValueType> map = new Hashmap<>();
✔︎ List와 Set과의 다른 점은 key로 쓰일 타입과 value로 쓰일 타입 두 가지를 모두 명시해야 한다는 것이다.
Map과 HashMap의 관계 또한 List와 ArrayList, Set과 HashSet의 관계와 동일하다. HashMap은 가장 흔히 쓰이는 Map의 자식 타입이다.
02) Map에 데이터 추가하기
✔︎ put 메소드 : map에 값을 넣을 때 사용한다.
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
Map<String, String> dictionary = new HashMap<>();
dictionary.put("hippo", "하마");
dictionary.put("chicken", "닭");
System.out.println(dictionary);
}
}
이처럼 list와 set과 다른점은 "hippo"는 "하마"이다. 와 같이 관계를 표현해준다는 것이다.
03) Map에서 데이터 가져오기
✔︎ get 메소드 : 인자로 키를 입력하게 되면 값을 반환한다.
* dictionary에 없는 값을 get을 통해 키로 사용하면 null을 반환한다.
< 단어사전 처럼 사용하기 >
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class MapExample {
public static void main(String[] args) {
Map<String, String> dictionary = new HashMap<>();
dictionary.put("hippo", "하마");
dictionary.put("chicken", "닭");
// 사용자가 입력한 영단어를 한글로 번역해주는 영단어 사전 만들기
Scanner scanner = new Scanner(System.in);
String english = scanner.nextLine();
String korean = dictionary.get(english);
if (korean == null) {
System.out.println("사전에 존재하지 않는 단어입니다.");
} else {
System.out.println(english + "는 " + korean + "입니다.");
}
}
}
04) Map에서 데이터 제거하기
1. 특정 키의 값을 Null로 바꿔주기
dictionary.put("chicken", null);
get 메소드를 이용해 "chicken"을 키값으로 사용하면 null을 반환하지만,
size 메소드를 사용하여 목록의 개수를 가져오면 줄어들지 않는다.
2. remove 메소드 사용
dictionary.remove("chicken");
키와 값이 모두 삭제된다.
05) Map의 크기 확인하기
✔︎ size 메소드 : list나 set 에서처럼 목록의 개수를 알려준다.
dictionary.size()
✔︎ isEmpty 메소드 : 맵이 비었다면 true를 반환하고, 비어있지 않다면 false를 반환하게 된다.
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class MapExample {
public static void main(String[] args) {
Map<String, String> dictionary = new HashMap<>();
dictionary.put("hippo", "하마");
dictionary.put("chicken", "닭");
dictionary.remove("chicken");
if (dictionary.isEmpty()) {
System.out.println("단어가 하나도 없습니다.");
} else {
System.out.println(dictionary.size() + " 개의 단어가 있습니다.");
}
}
}
1개의 단어가 있다고 출력된다.
06) 반복문에서 Map 이용하기
keySet : 키의 목록을 가져온다.
// 키 목록만 가져오기
Collection<String> keys = dictionary.keySet();
for (String english : keys) {
System.out.println(english);
}
* 반환타입은 collection(set과 list의 아버지 느낌)으로 거의 동일하게 사용할 수 있다.
* list와 set과 동일하게 for , for-each 문에 사용 가능하다.
✔︎ values : 값의 목록을 가져온다.
// 값 목록 가져오기
Collection<String> values = dictionary.values();
for (String korean: values) {
System.out.println(korean);
}
✔︎ entrySet : set을 반환한다. set의 entry 타입인데 이는 map의 키와 값 쌍 하나를 의미한다.
Map.Entry 또한 key의 타입과 value의 타입을 명시해주어야 한다.
Set<Map.Entry<String, String>> entries = dictionary.entrySet();
for (Map.Entry<String, String> entry : entries) {
String english = entry.getKey();
String korean = entry.getValue();
System.out.println(english + ": " + korean);
}
✔︎ entry.getKey : 키를 가져온다.
✔︎ entry.getValue : 값을 가져온다.
유투브 "초간단 자바"님 영상을 통해 공부한 내용입니다 !
'Language > Java' 카테고리의 다른 글
JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) | 2021.06.11 |
---|---|
static import (0) | 2021.06.05 |
메소드 (0) | 2021.04.28 |
파일 읽고 쓰기 (0) | 2021.04.02 |
숫자 맞추기 게임 만들기 (0) | 2021.03.31 |