Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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.

challenge icon

التحدي

سهل

أنشئ طريقة باسم <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);
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم Java عبر الإنترنت