HashMap متداخل
جزء من قسم Logic & Flow في رحلة Java على Coddy — الدرس 19 من 59.
الـ HashMap المتداخل هو HashMap تكون قيمه هي نفسها HashMaps. يتيح لك ذلك تنظيم البيانات المعقدة بشكل هرمي. على سبيل المثال، يمكنك الحصول على HashMap خارجي يربط الفئات (مثل "الإلكترونيات" أو "الأثاث") بـ 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في هذا المثال، تحتوي الخريطة الخارجية (outer map) على مفتاح واحد ("Electronics") والذي يرتبط بـ HashMap داخلية تحتوي على المفتاح "Laptop" وقيمته 1200.
التحدي
سهلقم بإنشاء طريقة تسمى <b>printNestedInventory</b> تأخذ HashMap متداخلاً يسمى inventory كمدخل. في هذا المخزون:
- المفاتيح (Keys) هي الفئات (مثل "Electronics"، "Furniture").
- القيم (Values) هي HashMaps داخلية حيث المفاتيح هي أسماء المنتجات والقيم هي أسعارها.
يجب أن تقوم الطريقة الخاصة بك بطباعة المخزون بالتنسيق التالي:
- لكل فئة، اطبع
Category: <name> - إذا كانت الفئة تحتوي على منتجات، اطبع كل منتج كـ
Product: <name>, Price: <price>(مع مسافتين من الإزاحة) - إذا كانت الفئة لا تحتوي على منتجات، اطبع
(No products)(مع مسافتين من الإزاحة)
مثال على المخرجات:
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 بالإضافة إلى الاستيرادات الأخرى المتوفرة.
ورقة مرجعية
الـ HashMap المتداخل هو HashMap تكون قيمه عبارة عن HashMaps، مما يسمح بتنظيم البيانات بشكل هرمي.
إنشاء HashMap متداخل:
HashMap<String, HashMap<String, Integer>> inventory = new HashMap<>();إضافة فئة مع HashMap داخلي فارغ:
inventory.put("Electronics", new HashMap<>());إضافة عنصر إلى الـ HashMap الداخلي:
inventory.get("Electronics").put("Laptop", 1200);التحقق مما إذا كانت الخريطة الخارجية فارغة والحصول على حجمها:
System.out.println(inventory.isEmpty()); // false
System.out.println(inventory.size()); // 1جرّب بنفسك
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);
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادجمع وطرح المصفوفاتالمصفوفات المتعرجة (Jagged Arrays)المصفوفات ثلاثية الأبعاد وما بعدهاأنماط المصفوفات ثنائية الأبعاد الشائعةمراجعة - كل شيء عن المصفوفات2HashMap الجزء الأول
ما هو الـ HashMap؟تعريف الـ HashMapالوصول إلى القيمالتحقق من وجود المفتاحتعديل القواميسملخص - HashMap3HashMap الجزء الثاني
دوال HashMapالتكرار باستخدام keySet()التكرار باستخدام entrySet()HashMap متداخلمراجعة - إدارة المستودعمراجعة - عمليات HashMap6التحكم المتقدم في تدفق البرنامج
العبارات المعنونةتعبير Switchمطابقة الأنماطجمل الحمايةمراجعة - تدفق التحكم