HashMap متداخل
جزء من قسم المنطق وتدفق التنفيذ في رحلة Java على Coddy. الدرس 19 من 59.
إن HashMap متداخل هو HashMap تكون قيمه نفسها عبارة عن HashMaps. يتيح لك ذلك تنظيم البيانات المعقدة بشكل هرمي. على سبيل المثال، يمكنك امتلاك HashMap خارجي outer يربط الفئات (مثل "Electronics" أو "Furniture") بـ HashMaps داخلية inner تحتوي على products وأسعارها.
أنشئ 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>(مع مسافتَي إزاحة) - إذا كانت الفئة لا تحتوي على أي منتجات، فاطبع
(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 إلى Nested 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 عبر الإنترنت