Menu
CoddyTech

HashMap lồng nhau

Thuộc phần Logic và luồng chương trình trong hành trình Java của Coddy. Bài học 19 trên 59.

HashMap lồng nhau là một HashMap có các giá trị cũng là HashMap. Cách này giúp bạn sắp xếp dữ liệu phức tạp theo thứ bậc. Ví dụ, bạn có thể tạo một HashMap bên ngoài ánh xạ các danh mục (như "Electronics" hoặc "Furniture") đến các HashMap bên trong chứa sản phẩm và giá của chúng.

Tạo một HashMap lồng nhau: danh mục -> (mặt hàng -> giá)

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

Thêm danh mục "Electronics" với một HashMap bên trong rỗng

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

Thêm mặt hàng "Laptop" với giá 1200 vào "Electronics"

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

Kiểm tra xem từ điển bên ngoài có rỗng không và in ra kích thước của nó

System.out.println(inventory.isEmpty());
// Đầu ra: false
System.out.println(inventory.size()); 
// Đầu ra: 1

Trong ví dụ này, từ điển bên ngoài có một khóa ("Electronics") trỏ đến một HashMap bên trong chứa khóa "Laptop" và giá trị tương ứng là 1200.

challenge icon

Thử thách

Dễ

Tạo một phương thức có tên printNestedInventory, nhận một HashMap lồng nhau có tên inventory làm đầu vào. Trong kho hàng này:

  • Khóa là các danh mục (ví dụ: "Electronics", "Furniture").
  • Giá trị là các HashMap bên trong, trong đó khóa là tên sản phẩm và giá trị là giá của sản phẩm.

Phương thức của bạn cần in kho hàng theo định dạng sau:

  • Với mỗi danh mục, in Category: <name>
  • Nếu danh mục có sản phẩm, in từng sản phẩm theo định dạng Product: <name>, Price: <price> (thụt lề 2 dấu cách)
  • Nếu danh mục không có sản phẩm, in (No products) (thụt lề 2 dấu cách)

Đầu ra ví dụ:

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

Lưu ý: HashMap không đảm bảo thứ tự lặp, vì vậy thứ tự các danh mục và sản phẩm trong đầu ra của bạn có thể khác với ví dụ trên. Đây là điều bình thường.

Lưu ý: Bạn cần nhập java.util.Map ngoài các phần nhập đã được cung cấp.

Tự làm thử

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) {
        // Duyệt qua từng danh mục trong HashMap bên ngoài
        // Với mỗi danh mục, in ra "Category: <name>"
        // Nếu map bên trong trống, in ra "  (No products)"
        // Nếu không, duyệt qua từng sản phẩm và in ra "  Product: <name>, Price: <price>"
        // Viết code tại đây
    }

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

        // Chuyển chuỗi JSON thành HashMap lồng nhau
        Type inventoryType = new TypeToken<HashMap<String, HashMap<String, Integer>>>(){}.getType();
        HashMap<String, HashMap<String, Integer>> inventory = new Gson().fromJson(inventoryString, inventoryType);

        printNestedInventory(inventory);
    }
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch Java online