Menu
Coddy logo textTech

ネストした HashMap

CoddyのJavaジャーニー「ロジックとフロー」セクションの一部 — レッスン 19/59。

ネストされた HashMap は、その値自体が HashMap である HashMap です。これにより、複雑なデータを階層的に整理できます。たとえば、外側の HashMap でカテゴリ(「Electronics」や「Furniture」など)を、製品とその価格を含む内側の HashMap にマッピングできます。

ネストされた HashMap を作成: カテゴリ -> (アイテム -> 価格)

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

この例では、外側のマップには1つのキー("Electronics")があり、それがキー "Laptop" とその値 1200 を含む内側の HashMap にマップされます。

challenge icon

チャレンジ

簡単

<b>printNestedInventory</b> という名前のメソッドを作成し、ネストされた HashMap である inventory を入力として受け取ってください。このインベントリでは:

  • キー はカテゴリです(例: "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 はイテレーション順序を保証しないため、出力におけるカテゴリと商品の順序が上記の例と異なる場合があります — これは想定通りです。

注意: 提供された他のインポートに加えて java.util.Map をインポートする必要があります。

チートシート

ネストされた 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腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン