Menu
Coddy logo textTech

중첩 HashMap

Coddy Java 여정의 논리와 흐름 섹션에 포함된 레슨 — 59개 중 19번째.

중첩된 HashMap은 값 자체가 HashMap인 HashMap입니다. 이렇게 하면 복잡한 데이터를 계층적으로 구성할 수 있습니다. 예를 들어, 카테고리(예: "Electronics" 또는 "Furniture")를 제품과 가격을 보유한 내부 HashMap에 매핑하는 외부 HashMap을 가질 수 있습니다.

중첩된 HashMap 생성: categories -> (items -> prices)

HashMap<String, HashMap<String, Integer>> inventory = new HashMap<>();

"Electronics" 카테고리를 빈 내부 HashMap과 함께 추가하세요

inventory.put("Electronics", new HashMap<>());

"Electronics"에 가격 1200인 아이템 "Laptop"을 추가하세요.

inventory.get("Electronics").put("Laptop", 1200);

외부 맵이 비어 있는지 확인하고 그 크기를 출력하세요

System.out.println(inventory.isEmpty());
// Output: false
System.out.println(inventory.size()); 
// Output: 1

이 예제에서 외부 map은 하나의 키("Electronics")를 가지며, 이는 내부 HashMap으로 매핑되며 해당 HashMap에는 키 "Laptop"과 그 값 1200이 포함되어 있습니다.

challenge icon

챌린지

쉬움

<b>printNestedInventory</b>라는 이름의 메서드를 생성하세요. 이 메서드는 inventory라는 중첩된 HashMap을 입력으로 받습니다. 이 인벤토리에서:

  • 는 카테고리입니다 (예: "Electronics", "Furniture").
  • 은 키가 제품 이름이고 값이 가격인 내부 HashMap입니다.

당신의 메서드는 인벤토리를 다음 형식으로 출력해야 합니다:

  • 각 카테고리에 대해 Category: <name>를 출력하세요
  • 카테고리에 제품이 있는 경우, 각 제품을 Product: <name>, Price: <price> (2칸 들여쓰기)로 출력하세요
  • 카테고리에 제품이 없는 경우, (No products) (2칸 들여쓰기)를 출력하세요

예제 출력:

Category: Electronics
  Product: Laptop, Price: 1200
  Product: Smartphone, Price: 800
Category: Furniture
  Product: Chair, Price: 50
  Product: Table, Price: 150
Category: EmptyCategory
  (No products)

참고: HashMap은 반복 순서를 보장하지 않으므로, 출력에서 카테고리와 제품의 순서가 위 예제와 다를 수 있습니다 — 이는 예상된 것입니다.

참고: 제공된 다른 import 외에 java.util.Map을 import해야 합니다.

치트 시트

중첩된 HashMap은 값 자체가 HashMap인 HashMap으로, 계층적 데이터 구성을 허용합니다.

중첩된 HashMap을 생성하세요:

HashMap<String, HashMap<String, Integer>> inventory = new HashMap<>();

빈 내부 HashMap과 함께 카테고리를 추가하세요:

inventory.put("Electronics", new HashMap<>());

내부 HashMap에 항목을 추가하세요:

inventory.get("Electronics").put("Laptop", 1200);

외부 맵이 비어 있는지 확인하고 크기를 가져오세요:

System.out.println(inventory.isEmpty()); // false
System.out.println(inventory.size()); // 1

직접 해보기

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void printNestedInventory(HashMap<String, HashMap<String, Integer>> inventory) {
        // 외부 HashMap의 각 카테고리에 대해 반복하세요
        // 각 카테고리에 대해 "Category: <name>"을 출력하세요
        // 내부 맵이 비어 있으면 "  (No products)"를 출력하세요
        // 그렇지 않으면 각 제품에 대해 반복하고 "  Product: <name>, Price: <price>"를 출력하세요
        // 여기에 코드를 작성하세요
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String inventoryString = scanner.nextLine();

        // JSON 문자열을 중첩 HashMap으로 변환하세요
        Type inventoryType = new TypeToken<HashMap<String, HashMap<String, Integer>>>(){}.getType();
        HashMap<String, HashMap<String, Integer>> inventory = new Gson().fromJson(inventoryString, inventoryType);

        printNestedInventory(inventory);
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리와 흐름의 모든 레슨