يستخدم HashMap في Java مزيجًا من أساليب hashCode () وequals () لتخزين واسترجاع قيمة المفتاح بكفاءة أزواج. عند إضافة زوج جديد من قيمة المفتاح، يتم حساب طريقة hashCode() للمفتاح أولاً لتحديد مجموعة التجزئة التي سيتم وضع الإدخال فيها. يتم بعد ذلك استخدام طريقة يساوي () للتحقق من المفاتيح المكررة داخل المجموعة المحددة.
في رمز الاختبار المحدد، تحدد فئة ToDos التنفيذ البدائي لـ يساوي ()، مما يضمن أن الكائنات لها نفس حقل اليوم سيتم اعتبارها متساوية. عندما يكون السطر // public int hashCode() { return 9; } بدون تعليق، جميع كائنات ToDos، بغض النظر عن حقل اليوم الخاص بها، تُجبر على إرجاع نفس قيمة hashCode(). ونتيجة لذلك، يتم تعيين جميع كائنات ToDos إلى نفس مجموعة التجزئة، بغض النظر عن حقل اليوم الخاص بها.
عندما يتم استدعاء الأسلوب Map.size() مع سطر التعليق، فإن كائنات ToDos ذات يوم مختلف يتم وضع الحقول (t1، t2، t3) في مجموعات تجزئة مختلفة نظرًا لقيم hashCode() المميزة الخاصة بها. ونتيجة لذلك، يُرجع Map.size() العدد ثلاثة بدقة.
على العكس من ذلك، عندما يكون السطر غير معلق، يتم تعيين جميع كائنات ToDos إلى نفس مجموعة التجزئة، مع إرجاع الأسلوب Map.size() لاحقًا عدد اثنين. وذلك لأن HashMap تعتبر جميع كائنات ToDos "متكافئة منطقيًا" لأنها تُرجع نفس قيمة hashCode().
باختصار، استخدام أساليب hashCode () وequals () هو حاسم لتشغيل HashMap بكفاءة. من خلال تجاوز طريقة hashCode() فقط، من الضروري التأكد من أن المفاتيح المكافئة منطقيًا تولد قيم hashCode() متسقة. يمكن أن يؤدي تجاوز طريقة يساوي () فقط إلى حدوث مشكلات في الأداء بسبب زيادة عدد المقارنات المطلوبة لتحديد التكافؤ المنطقي. يعد تحقيق التوازن الصحيح بين التجزئة الفعالة عبر hashCode() وضمان مساواة الكائنات من خلال يساوي() أمرًا أساسيًا للاستخدام الأمثل لـ HashMap.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3