Menu
Coddy logo textTech

HashMap מקונן

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Java של Coddy. שיעור 19 מתוך 59.

HashMap מקונן הוא HashMap שהערכים שלו הם בעצמם HashMaps. כך אפשר לארגן נתונים מורכבים באופן היררכי. לדוגמה, אפשר ליצור HashMap חיצוני שממפה קטגוריות (כמו "Electronics" או "Furniture") ל-HashMaps פנימיים שמכילים מוצרים ואת המחירים שלהם.

צרו HashMap מקונן: קטגוריות -> (פריטים -> מחירים)

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

הוסף קטגוריה "Electronics" עם HashMap פנימי ריק

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

הוסף פריט "Laptop" במחיר 1200 לתוך "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

אתגר

קל

צור מתודה בשם <b>printNestedInventory</b> שמקבלת כקלט HashMap מקונן בשם inventory. במלאי הזה:

  • מפתחות הם קטגוריות (למשל, "Electronics", "Furniture").
  • ערכים הם HashMaps פנימיים שבהם המפתחות הם שמות מוצרים והערכים הם המחירים שלהם.

המתודה שלך צריכה להדפיס את המלאי בפורמט הבא:

  • עבור כל קטגוריה, הדפס 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 אונליין