HashMap متداخل
جزء من قسم المنطق وتدفق التنفيذ في رحلة 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في هذا المثال، تحتوي الخريطة الخارجية على مفتاح واحد ("Electronics") يشير إلى HashMap داخلية تحتوي على المفتاح "Laptop" وقيمته 1200.
التحدي
سهلأنشئ طريقة باسم printNestedInventory تأخذ خريطة HashMap متداخلة باسم inventory كمدخل. في هذه المخزونات:
- المفاتيح هي الفئات (مثل "Electronics" و"Furniture").
- القيم هي خرائط HashMap داخلية تكون مفاتيحها أسماء المنتجات وقيمها أسعارها.
يجب أن تطبع طريقتك المخزون بالتنسيق التالي:
- لكل فئة، اطبع
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 بالإضافة إلى الاستيرادات الأخرى المتوفرة.
جرّب بنفسك
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المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادجمع وطرح المصفوفاتالمصفوفات المتعرجة (Jagged Arrays)المصفوفات ثلاثية الأبعاد وما بعدهاأنماط المصفوفات ثنائية الأبعاد الشائعةمراجعة - كل شيء عن المصفوفات2HashMap الجزء الأول
ما هو الـ HashMap؟تعريف الـ HashMapالوصول إلى القيمالتحقق من وجود المفتاحتعديل القواميسملخص - HashMap3HashMap الجزء الثاني
دوال HashMapالتكرار باستخدام keySet()التكرار باستخدام entrySet()HashMap متداخلمراجعة - إدارة المستودعمراجعة - عمليات HashMap6التحكم المتقدم في تدفق البرنامج
العبارات المعنونةتعبير Switchمطابقة الأنماطجمل الحمايةمراجعة - تدفق التحكمتدرّب بنفسك: مترجم Java عبر الإنترنت