Language/Java

느낌표 공장장 2021. 4. 29. 23:29

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 : 값을 가져온다.

 

 

 

유투브 "초간단 자바"님 영상을 통해 공부한 내용입니다 !

www.youtube.com/watch?v=Kce9pFcOHU0

'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