Menu
CoddyTech

嵌套 HashMap

本课属于 Coddy Java 学习旅程的“逻辑与流程”单元。第 19 课,共 59 课。

嵌套 HashMap 是一种值本身也是 HashMap 的 HashMap。这样可以按层级组织复杂数据。例如,你可以使用外层 HashMap 将类别(如“电子产品”或“家具”)映射到内层 HashMap,内层 HashMap 中存放产品及其价格。

创建一个嵌套的 HashMap:类别 ->(商品 -> 价格)

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

添加一个名为“电子产品”的类别,并将其内部的 HashMap 留空

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

将价格为 1200 的“Laptop”添加到“Electronics”中。

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

检查外层映射是否为空,并打印其大小

System.out.println(inventory.isEmpty());
// 输出:false
System.out.println(inventory.size()); 
// 输出: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 在线编译器