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.
אתגר
קלצור מתודה בשם <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);
}
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מערכים רב־ממדיים
יסודות מערכים דו־ממדייםגישה לאיברים במערך דו־ממדילולאות מקוננות עם מערכים דו־ממדייםסיכום — מערכים דו־ממדייםחיבור וחיסור מטריצותמערכים מדורגיםמערכים תלת־ממדיים ומעבר להםתבניות נפוצות במערכים דו־ממדייםסיכום — כל מה שצריך לדעת על מערכים3HashMap חלק 2
מתודות של HashMapמעבר באמצעות keySet()מעבר באמצעות entrySet()HashMap מקונןסיכום – ניהול מחסןסיכום – פעולות HashMapתרגלו בעצמכם: קומפיילר Java אונליין