본문 바로가기
공부

Java 컬렉션 (4) : Map

by 나나도 2024. 4. 26.
반응형

 

 4. Map  

  • key-value 형태로 데이터를 저장하기 때문에 기존에 순번으로만 조회하던 방식에서, key 값을 기준으로 vlaue를 조회할 수 있다. ( LinkedHashMap 으로 생성하면 순서 보장)
  • key 값 단위로 중복을 허용하지 않는다. 
  • Map 은 그냥 Map으로 쓸 수도 있지만 HashMap, TreeMap 등으로 응용하여 사용할 수 있다.
  • 선언 : Map<String, Integer> intMap 형태로 Key타입과 Value타입을 지정하여 선언
  • 생성 : new HashMap<>();
  • 추가 : intMap.put( { 추가할 Key값 }, { 추가할 Value값 } ) 형태로 Key에 Value값 추가
  • 조회 : intMap.get( { 조회할 Key값 } ) 형태로 Key에 있는 Value값 조회
  • 전체 key 조회 : intMap.keySet()
  • 전체 value 조회 : intMap.values()
  • 삭제 : intMap.remove({삭제할 Key값}) 형태로 Key에 있는 Value값 삭제
이외
  • HashMap : 중복을 허용하지 않고 순서를 보장하지 않음, 키와 값으로 null이 허용
  • TreeMap : key 값을 기준으로 정렬 할 수 있음. 다만, 저장 시 정렬(오름차순)을 하기 때문에 저장시간이 다소 오래 걸림
// Map 
import java.util.Map; // Map 쓰고 엔터 치면 자동 생성

public class Main {

	public static void main(String[] args) {
		Map<String, Integer> intMap = new HashMap<>(); // 선언 및 생성

		//          키 , 값
		intMap.put("일", 11);
		intMap.put("이", 12);
		intMap.put("삼", 13);
		intMap.put("삼", 14); // 중복 Key값은 덮어씁니다.
		intMap.put("삼", 15); // 중복 Key값은 덮어씁니다.

		// key 값 전체 출력
		for (String key : intMap.keySet()) {
			System.out.println(key); // 일,이,삼 출력
		}

		// value 값 전체 출력
		for (Integer key : intMap.values()) {
			System.out.println(key); // 11,12,15 출력
		}

		// get()
		System.out.println(intMap.get("삼")); // 15 출력
	}
}

 

 

 


 

예제 : 자료구조 요리 레시피 메모장 만들기

입력값

-저장할 자료구조명 입력

-요리 제목 입력

-한 문장씩 레시피 입력

-입력을 마쳤으면 마지막에 "끝" 문자 입력

package week02.collection;
import java.util.*;

public class col08 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        List<String> list = new LinkedList<>();
        Set<String> set = new LinkedHashSet<>();
        Map<Integer, String> map = new LinkedHashMap<>();

        String collection = "";

        // 정상적인 값(list, set, map)을 입력하기 전까지 반복문을 탈출할 수 없다.
        while(true){
            System.out.print("저장할 자료구조명을 입력 : ");
            String str = input.nextLine();

            if ("list".equalsIgnoreCase(str) || "set".equalsIgnoreCase(str) || "map".equalsIgnoreCase(str)) {
                // 정상적인 값을 while문 밖에 전달
                collection = str;
                break;
            } else {
                System.out.println("자료구조명을 다시 입력해주세요.");
            }
        }

        System.out.print("내가 좋아하는 요리 제목 입력 : ");
        String cook = input.nextLine();

        // 소문자로 치환 후 비교
        switch (collection.toLowerCase()) {
            case "list" :
                System.out.print("레시피 입력(그만두고 싶으면 끝 입력) : ");
                // 끝 입력하기 전까지 무한반복
                while (true) {
                    String str = input.nextLine();

                    if ("끝".equals(str)) {
                        break;
                    } else {
                        list.add(str);
                    }
                }

                // 제목 출력
                System.out.println("[ " + collection + " 으로 저장된 " + cook + " 만들기 ]");

                int i = 1;
                for (String s : list) {
                    System.out.println(i + ". " + s);
                    i++;
                }
                break;

            case "set" :
                System.out.print("레시피 입력(그만두고 싶으면 끝 입력) : ");
                // 끝 입력하기 전까지 무한반복
                while (true) {
                    String str = input.nextLine();

                    if ("끝".equals(str)) {
                        break;
                    } else {
                        set.add(str);
                    }
                }

                // 제목 출력
                System.out.println("[ " + collection + " 으로 저장된 " + cook + " 만들기 ]");

                // Set은 인덱스를 활용하여 값을 꺼낼 수 없기 때문에 향상된 포문을 활용한다.
                int j = 1;
                for (String s : set) {
                    System.out.println(j + ". " + s);
                    j++;
                }
                break;

            case "map" :
                System.out.print("레시피 입력(그만두고 싶으면 끝 입력) : ");
                // 끝 입력하기 전까지 무한반복
                int k = 1;
                while (true) {
                    String str = input.nextLine();

                    if ("끝".equals(str)) {
                        break;
                    } else {
                        map.put(k,str);
                        k++;
                    }
                }

                // 제목 출력
                System.out.println("[ " + collection + " 으로 저장된 " + cook + " 만들기 ]");

                // Map에 저장된 밸류들을 하나씩 꺼내서 순서대로 레시피 출력(LinkedHashMap일 경우에 순서가 보장되기 때문에 해당 방법 사용 가능)
                int l = 1;
                for (String value : map.values()) {
                    System.out.println(l + ". " + value);
                    l++;
                }
                break;
        }

    }
}
반응형

'공부' 카테고리의 다른 글

[Spring] Request/Response  (0) 2024.05.16
상속  (0) 2024.05.13
Java 컬렉션 (3) : Set  (0) 2024.04.26
Java 컬렉션 (2) : Queue  (1) 2024.04.26
Java 컬렉션 (1) : List  (4) 2024.04.26