logo

عمل HashMap في جافا


ما هو التجزئة

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

ما هو هاشماب

يعد HashMap جزءًا من إطار عمل مجموعة Java. ويستخدم تقنية تسمى التجزئة. وهي تنفذ واجهة الخريطة. يقوم بتخزين البيانات في زوج المفتاح والقيمة. يحتوي HashMap على مصفوفة من العقد، ويتم تمثيل العقدة كفئة. يستخدم مصفوفة وبنية بيانات LinkedList داخليًا لتخزين المفتاح والقيمة. هناك أربعة حقول في HashMap.

عمل HashMap في جافا

قبل فهم العمل الداخلي لـ HashMap، يجب أن تكون على دراية بأسلوب hashCode() وequals().

التعليقات التوضيحية في التمهيد الربيع
    يساوي ():يتحقق من المساواة بين كائنين. ويقارن المفتاح سواء كانوا متساوين أم لا. إنها طريقة لفئة الكائن. يمكن تجاوزه. إذا قمت بتجاوز طريقة يساوي ()، فمن الضروري تجاوز طريقة hashCode ().كود التجزئة ():هذه هي طريقة فئة الكائن. تقوم بإرجاع مرجع الذاكرة للكائن في شكل عدد صحيح. يتم استخدام القيمة المستلمة من الطريقة كرقم الجرافة. رقم الجرافة هو عنوان العنصر داخل الخريطة. رمز التجزئة للمفتاح الفارغ هو 0.دلاء:صفيف العقدة يسمى الدلاء. تحتوي كل عقدة على بنية بيانات مثل LinkedList. يمكن لأكثر من عقدة مشاركة نفس المجموعة. قد تكون مختلفة في القدرة.
عمل HashMap في جافا

أدخل المفتاح وزوج القيمة في HashMap

نستخدم طريقة put () لإدراج زوج المفتاح والقيمة في HashMap. الحجم الافتراضي لـ HashMap هو 16 (من 0 إلى 15).

مثال

في المثال التالي، نريد إدراج ثلاثة أزواج (مفتاح، قيمة) في HashMap.

 HashMap map = new HashMap(); map.put('Aman', 19); map.put('Sunny', 29); map.put('Ritesh', 39); 

دعونا نرى في أي فهرس سيتم حفظ زوج المفتاح والقيمة في HashMap. عندما نستدعي طريقة put()، فإنها تقوم بحساب رمز التجزئة للمفتاح 'Aman'. لنفترض أن رمز التجزئة لـ 'أمان' هو 2657860. لتخزين المفتاح في الذاكرة، علينا حساب الفهرس.

حساب المؤشر

يقوم الفهرس بتصغير حجم المصفوفة. صيغة حساب المؤشر هي:

تقليم سلسلة جافا
 Index = hashcode(Key) & (n-1) 

حيث n هو حجم المصفوفة وبالتالي فإن قيمة المؤشر لـ 'أمان' هي:

 Index = 2657860 & (16-1) = 4 

القيمة 4 هي قيمة الفهرس المحسوبة حيث سيتم تخزين المفتاح والقيمة في HashMap.

عمل HashMap في جافا

تصادم التجزئة

هذا هو الحال عندما تكون قيمة الفهرس المحسوبة هي نفسها بالنسبة لمفتاحين أو أكثر. دعونا نحسب رمز التجزئة لمفتاح آخر 'مشمس'. لنفترض أن رمز التجزئة لـ 'Sunny' هو 63281940. لتخزين المفتاح في الذاكرة، علينا حساب الفهرس باستخدام صيغة الفهرس.

 Index=63281940 & (16-1) = 4 

القيمة 4 هي قيمة الفهرس المحسوبة حيث سيتم تخزين المفتاح في HashMap. في هذه الحالة، تتحقق طريقة يساوي () من أن كلا المفتاحين متساويان أم لا. إذا كانت المفاتيح هي نفسها، فاستبدل القيمة بالقيمة الحالية. بخلاف ذلك، قم بتوصيل كائن العقدة هذا بكائن العقدة الموجود من خلال LinkedList. ومن ثم سيتم تخزين كلا المفتاحين في الفهرس 4.

عمل HashMap في جافا

وبالمثل، سوف نقوم بتخزين المفتاح 'Ritesh'. لنفترض أن رمز التجزئة للمفتاح هو 2349873. ستكون قيمة الفهرس 1. وبالتالي سيتم تخزين هذا المفتاح في الفهرس 1.

إديث ماك هيرش
عمل HashMap في جافا

طريقة get () في HashMap

يتم استخدام طريقة get() للحصول على القيمة من خلال مفتاحها. لن يجلب القيمة إذا كنت لا تعرف المفتاح. عندما يتم استدعاء طريقة get(K Key)، فإنها تحسب رمز التجزئة للمفتاح.

لنفترض أنه يتعين علينا جلب المفتاح 'أمان'. سيتم استدعاء الطريقة التالية.

 map.get(new Key('Aman')); 

يقوم بإنشاء رمز التجزئة كـ 2657860. الآن احسب قيمة الفهرس 2657860 باستخدام صيغة الفهرس. وستكون قيمة المؤشر 4، كما حسبنا أعلاه. تبحث طريقة get() عن قيمة الفهرس 4. وهي تقارن مفتاح العنصر الأول بالمفتاح المحدد. إذا كان كلا المفتاحين متساويين، فسيتم إرجاع القيمة وإلا تحقق من العنصر التالي في العقدة إذا كان موجودًا. في السيناريو الخاص بنا، تم العثور عليه باعتباره العنصر الأول في العقدة ويعيد القيمة 19.

دعونا نحضر مفتاحًا آخر 'مشمس'.

رمز التجزئة للمفتاح 'Sunny' هو 63281940. قيمة الفهرس المحسوبة 63281940 هي 4، كما حسبناها لطريقة put(). انتقل إلى الفهرس 4 للمصفوفة وقارن مفتاح العنصر الأول بالمفتاح المحدد. كما أنه يقارن المفاتيح. في السيناريو الخاص بنا، المفتاح المحدد هو العنصر الثاني، والعقدة التالية فارغة. يقوم بمقارنة مفتاح العنصر الثاني بالمفتاح المحدد وإرجاع القيمة 29. ويتم إرجاعه فارغًا إذا كان العقدة التالية فارغة.