Menu
CoddyTech

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

אתגר

קל

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

  • המפתחות הם קטגוריות (למשל, "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 אונליין