Menu
CoddyTech

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.

challenge icon

التحدي

سهل

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

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

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

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