Menu
CoddyTech

ネストした HashMap

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

ネストされたHashMapとは、値自体がHashMapであるHashMapです。これにより、複雑なデータを階層的に整理できます。たとえば、カテゴリ(「Electronics」や「Furniture」など)を、商品とその価格を格納する内側のHashMapに対応付ける外側のHashMapを作成できます。

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

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

空の内部 HashMap を持つ「Electronics」カテゴリを追加します

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

「Electronics」に価格1200で「Laptop」を追加します

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

外側のマップが空かどうかを確認し、そのサイズを出力します

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

この例では、外側のマップには1つのキー("Electronics")があり、内側のHashMapにあるキー"Laptop"とその値1200に対応しています。

challenge icon

チャレンジ

簡単

printNestedInventoryという名前のメソッドを作成し、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は反復順序を保証しないため、出力されるカテゴリや商品の順序は上記の例と異なる場合があります。これは想定された動作です。

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

自分で試してみよう

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腕試し

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

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

自分で練習してみよう: Javaオンラインコンパイラ