嵌套 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。
挑战
简单创建一个名为 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);
}
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Java 在线编译器