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