في Java ما هو الفرق بين IdentityHashMap و HashMap + Performance Comparison

نشرت: 2021-10-19
الفرق بين اداء هاشماب وهشماب مقارنة الاداء

في وقت ما ، لدي حالة خاصة يجب أن أقارن فيها مفتاح الخريطة بناءً على equality operator (==) . عامل المساواة (==) يقارن المراجع (العناوين في الذاكرة) للمفتاحين كرقمين مختلفين.

من ناحية أخرى ، HashMap هو مكون Java Collection Framework الأكثر استخدامًا والذي يقارن تفرد المفتاح بمساعدة طريقة equals() .

أيضًا ، لا يستخدم IdentityHashMap التجزئة من object.hashCode() ولكنه يستخدم System.identityHashCode(object) . يمكننا استخدام IdentityHashMap للكائنات القابلة للتغيير التي يتغير كود التجزئة الخاص بها أثناء وقت التشغيل.

إذا كنت تريد معرفة المزيد عن equals() و == التي تنطبق on String Object ، فاتبع هذا البرنامج التعليمي: https://crunchify.com/how-to-override-equals-and-hashcode-method-in-java/.

الاختبار الأساسي الذي يوضح أعلاه يساوي () و == السلوك:

نتيجة:

لنقم باختبار الأداء على كلا الخريطتين:

  1. إنشاء فئة جافا: CrunchifyIdentityHashMapVsHashMapPerformance .java
  2. startCrunchifyTest()
    • يولد حجم خريطة عشوائية بالملايين
    • إنشاء وتهيئة crunchifyString[] كائن String Array مع رقم عشوائي تم إنشاؤه أعلاه مع النص: This is Crunchify's Test # number
  3. crunchifyCompareIdentityHashMapVsHashMap(String[] crunchifyString , Map<String, Integer> crunchifyMap , String name )
    • قم بتمرير جميع المعلمات المطلوبة لهذه الطريقة
    • crunchifyMap سيكون لها قيمة IdentityHashMap / HashMap
    • كرر خلال crunchifyString [] وضع القيم على الخريطة - تستغرق هذه العملية بعض الوقت
    • كرر خلال crunchifyString [] واحصل على القيم من الخريطة - تستغرق هذه العملية بعض الوقت
    • سنكتشف وقت التنفيذ لكلتا العمليتين المذكورتين أعلاه حتى نتمكن من مقارنة أيهما أفضل للعمليات المذكورة أعلاه؟ IdentityHashMap أو HashMap
    • طباعة النتيجة أعلاه
  4. نفذ المهام المذكورة أعلاه 2 و 3 إجمالي 8 مرات.

نتيجة:

ملاحظة:

كما ترون هنا في النتيجة ، فإن أداء IdentityHashMap للخرائط الكبيرة أفضل بكثير. لماذا ا؟ IdentityHashMap doesn't use equals() and hashcode() methods ، والتي تعتبر مكلفة للغاية.

لمعلوماتك فقط:

العمليات المذكورة أعلاه التي نقوم بها لوضع القيم والحصول عليها من الخريطة وداخلها هي عمليات مكثفة للغاية لوحدة المعالجة المركزية.

IdentityHashMap مقابل اختبار HashMap - استخدام وحدة المعالجة المركزية