تهيئة HashMap في Java: سر الطريقة "الحرفية"

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيفية تهيئة HashMap في Java دون جنون: تحليل كامل للمبتدئين

\n\n

هل سبق لك أن كتبت كودًا بلغة Java وشعرت أن إنشاء قاموس بسيط يتطلب كتابة قصيدة كاملة؟ خاصة عندما تريد القيام بذلك بشكل أنيق ومضغوط، كما في Python أو JavaScript. ألم مألوف؟ على Stack Overflow، سؤال حول كيفية تهيئة HashMap بطريقة حرفية حصد آلاف المشاهدات. وهذا ليس من قبيل الصدفة.

\n\n

في هذه المقالة، سنستعرض جميع الطرق القانونية لتهيئة HashMap في Java، من الطريقة الكلاسيكية إلى الحديثة، مع أمثلة كود وشروحات للمبتدئين. ستتعلم كيفية ملء الخريطة بسطر واحد، ومتى تستخدم Map.of()، ولماذا تهيئة double brace هي سلاح ذو حدين.

\n\n

لماذا مجرد "وضع" العناصر هو ألم؟

\n\n

تخيل أنك بحاجة لإنشاء HashMap بثلاثة أزواج "مفتاح-قيمة". الكود النموذجي للمبتدئ يبدو هكذا:

\n\n
HashMap<String, Integer> map = new HashMap<>();\nmap.put("apple", 5);\nmap.put("banana", 3);\nmap.put("orange", 7);
\n\n

يبدو الأمر طبيعيًا، ولكن عندما يكون لديك عشر خرائط من هذا القبيل، يتحول الكود إلى ورقة طويلة. ألا تريد الإيجاز، أليس كذلك؟ في Python يتم ذلك بسطر واحد: dict = {"apple": 5, "banana": 3}. وفي Java؟ مفاجأة: هناك عدة طرق، وسنستعرضها الآن.

\n\n

الطريقة رقم 1: تهيئة Double Brace (التهيئة المزدوجة)

\n\n

الطريقة الأكثر شيوعًا (والأكثر إثارة للجدل) هي تهيئة double brace. تبدو هكذا:

\n\n
HashMap<String, Integer> map = new HashMap<>() {{\n    put("apple", 5);\n    put("banana", 3);\n    put("orange", 7);\n}};
\n\n

كيف يعمل هذا؟ الأقواس المتعرجة الأولى تنشئ فئة داخلية مجهولة ترث من HashMap. الثانية هي كتلة تهيئة المثيل، التي يتم تنفيذها عند إنشاء الكائن. كل ما بداخلها هو استدعاءات put().

\n\n

الإيجابيات:

\n
    \n
  • يصبح الكود أكثر إحكامًا وقابلية للقراءة.
  • \n
  • لا حاجة لكتابة عدة أسطر مع put().
  • \n
\n\n

السلبيات (وهي كثيرة):

\n
    \n
  • الأداء: يتم إنشاء فئة مجهولة في كل مرة. هذا عمل إضافي لـ JVM.
  • \n
  • الذاكرة: الفئة المجهولة تحتوي على مرجع للفئة الخارجية، مما قد يسبب تسربًا للذاكرة.
  • \n
  • التسلسل: إذا حاولت تسلسل مثل هذه الخريطة، فقد تواجه مشاكل.
  • \n
  • عدم التوافق: لا تعمل مع بعض الأطر (مثل بعض إصدارات Gson).
  • \n
\n\n

الخلاصة: الطريقة تعمل، ولكن من الأفضل استخدامها فقط في كود الاختبار أو المشاريع الشخصية. للإنتاج - غير موصى بها.

\n\n

الطريقة رقم 2: Guava (مكتبة من Google)

\n\n

إذا كنت تستخدم Google Guava (وهي مكتبة شائعة جدًا)، فسيتم حل المشكلة بأناقة:

\n\n
import com.google.common.collect.ImmutableMap;\n\nMap<String, Integer> map = ImmutableMap.of(\n    "apple", 5,\n    "banana", 3,\n    "orange", 7\n);
\n\n

الميزات:

\n
    \n
  • يتم إنشاء خريطة غير قابلة للتغيير (immutable).
  • \n
  • طريقة of() محملة بشكل زائد لـ 0-5 أزواج. إذا كان أكثر، استخدم ImmutableMap.builder().
  • \n
  • مناسبة تمامًا للتكوينات والبيانات الثابتة.
  • \n
\n\n

العيب: تحتاج إلى إضافة تبعية خارجية. إذا كان المشروع يستخدم Guava بالفعل - ممتاز. إذا لم يكن - ربما لا يستحق العناء.

\n\n

الطريقة رقم 3: Java 9+ - Map.of() و Map.ofEntries()

\n\n

ابتداءً من Java 9، ظهرت طريقة M

المدونات

توصيات الكتب