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: 1Trong 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.
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);
}
}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
1Mảng đa chiều
Kiến thức cơ bản về mảng 2DTruy cập phần tử trong mảng 2DVòng lặp lồng nhau với mảng 2DÔn tập về mảng 2DPhép cộng và phép trừ ma trậnMảng không đềuMảng 3D trở lênCác mẫu thường gặp với mảng 2DÔn tập về mảng2HashMap phần 1
HashMap là gì?Khai báo HashMapTruy cập giá trịKiểm tra khóa có tồn tạiChỉnh sửa từ điểnÔn tập: HashMap3HashMap phần 2
Phương thức của HashMapDuyệt bằng keySet()Duyệt bằng entrySet()HashMap lồng nhauÔn tập: Quản lý kho hàngÔn tập: Thao tác với HashMap6Luồng điều khiển nâng cao
Câu lệnh nhãnBiểu thức switchSo khớp mẫuMệnh đề bảo vệÔn tập: luồng điều khiểnTự luyện tập: Trình biên dịch Java online