ما هو التجزئة
إنها عملية تحويل كائن إلى قيمة عددية. تساعد القيمة الصحيحة في الفهرسة وعمليات البحث بشكل أسرع.
ما هو هاشماب
يعد HashMap جزءًا من إطار عمل مجموعة Java. ويستخدم تقنية تسمى التجزئة. وهي تنفذ واجهة الخريطة. يقوم بتخزين البيانات في زوج المفتاح والقيمة. يحتوي HashMap على مصفوفة من العقد، ويتم تمثيل العقدة كفئة. يستخدم مصفوفة وبنية بيانات LinkedList داخليًا لتخزين المفتاح والقيمة. هناك أربعة حقول في HashMap.
قبل فهم العمل الداخلي لـ HashMap، يجب أن تكون على دراية بأسلوب hashCode() وequals().
التعليقات التوضيحية في التمهيد الربيع
أدخل المفتاح وزوج القيمة في 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.
تصادم التجزئة
هذا هو الحال عندما تكون قيمة الفهرس المحسوبة هي نفسها بالنسبة لمفتاحين أو أكثر. دعونا نحسب رمز التجزئة لمفتاح آخر 'مشمس'. لنفترض أن رمز التجزئة لـ 'Sunny' هو 63281940. لتخزين المفتاح في الذاكرة، علينا حساب الفهرس باستخدام صيغة الفهرس.
Index=63281940 & (16-1) = 4
القيمة 4 هي قيمة الفهرس المحسوبة حيث سيتم تخزين المفتاح في HashMap. في هذه الحالة، تتحقق طريقة يساوي () من أن كلا المفتاحين متساويان أم لا. إذا كانت المفاتيح هي نفسها، فاستبدل القيمة بالقيمة الحالية. بخلاف ذلك، قم بتوصيل كائن العقدة هذا بكائن العقدة الموجود من خلال LinkedList. ومن ثم سيتم تخزين كلا المفتاحين في الفهرس 4.
وبالمثل، سوف نقوم بتخزين المفتاح 'Ritesh'. لنفترض أن رمز التجزئة للمفتاح هو 2349873. ستكون قيمة الفهرس 1. وبالتالي سيتم تخزين هذا المفتاح في الفهرس 1.
إديث ماك هيرش
طريقة get () في HashMap
يتم استخدام طريقة get() للحصول على القيمة من خلال مفتاحها. لن يجلب القيمة إذا كنت لا تعرف المفتاح. عندما يتم استدعاء طريقة get(K Key)، فإنها تحسب رمز التجزئة للمفتاح.
لنفترض أنه يتعين علينا جلب المفتاح 'أمان'. سيتم استدعاء الطريقة التالية.
map.get(new Key('Aman'));
يقوم بإنشاء رمز التجزئة كـ 2657860. الآن احسب قيمة الفهرس 2657860 باستخدام صيغة الفهرس. وستكون قيمة المؤشر 4، كما حسبنا أعلاه. تبحث طريقة get() عن قيمة الفهرس 4. وهي تقارن مفتاح العنصر الأول بالمفتاح المحدد. إذا كان كلا المفتاحين متساويين، فسيتم إرجاع القيمة وإلا تحقق من العنصر التالي في العقدة إذا كان موجودًا. في السيناريو الخاص بنا، تم العثور عليه باعتباره العنصر الأول في العقدة ويعيد القيمة 19.
دعونا نحضر مفتاحًا آخر 'مشمس'.
رمز التجزئة للمفتاح 'Sunny' هو 63281940. قيمة الفهرس المحسوبة 63281940 هي 4، كما حسبناها لطريقة put(). انتقل إلى الفهرس 4 للمصفوفة وقارن مفتاح العنصر الأول بالمفتاح المحدد. كما أنه يقارن المفاتيح. في السيناريو الخاص بنا، المفتاح المحدد هو العنصر الثاني، والعقدة التالية فارغة. يقوم بمقارنة مفتاح العنصر الثاني بالمفتاح المحدد وإرجاع القيمة 29. ويتم إرجاعه فارغًا إذا كان العقدة التالية فارغة.