البرمجة

فهم عمل IdentityHashMap في Java

في هذا المثال، سنقوم بفحص كيفية عمل طريقة get(key) في IdentityHashMap في مواقف محددة. أولاً وقبل كل شيء، دعونا نلقي نظرة على الشيفرة التي قدمتها.

قمت بإنشاء كائنات HashMap و IdentityHashMap، ومن ثم وضعت مفاتيح وقيم في هذين الكائنين باستخدام الأسطر التالية:

java
hashmapObject.put(new String("key"), "Google"); hashmapObject.put(new String("key"), "Facebook"); identityObject.put(new String("identityKey"), "Google"); identityObject.put(new String("identityKey"), "Facebook");

في حالة HashMap، يعمل هذا بشكل عادي ولكن في حالة IdentityHashMap، فإن القيمة السابقة التي قدمتها للمفتاح "identityKey" ستستبدل القيمة الجديدة. يتم ذلك بناءً على المقارنة بالهوية في IdentityHashMap، حيث يتم التحقق من هوية الكائن نفسه بدلاً من استخدام الطريقة equals().

الآن، بالنسبة للسؤال الرئيسي حول سبب عودة قيمة null عند استخدام طريقة get("identityKey") في IdentityHashMap، يرجى مراعاة أنك قد قمت بإنشاء كائنات String جديدة لكل مفتاح. في Java، يتم التعامل مع السلاسل باعتبارها ككائنات لديها هوية خاصة بها.

عند استخدام get("identityKey") في IdentityHashMap، يتم التحقق من هوية الكائن المستخدم كمفتاح. في هذا السياق، لدينا كائنات String مختلفة لكل مفتاح "identityKey"، وبالتالي تُعتبر هذه الهويات مختلفة ولا تتطابق، مما يؤدي إلى عدم العثور على المفتاح وبالتالي إلى عودة قيمة null.

لتفادي هذا، يجب استخدام نفس الكائن كمفتاح في IdentityHashMap. في هذه الحالة، ستكون هويتها هوية المفتاح المحدد، وبالتالي ستكون القيمة متاحة بشكل صحيح باستخدام get("identityKey").

المزيد من المعلومات

بالطبع، سنقوم الآن بتوسيع فهمنا لهذا المثال ونستكشف المزيد من المعلومات حول كيفية عمل IdentityHashMap وسبب عودة قيمة null عند استخدام طريقة get("identityKey").

أولًا، يُلاحظ أن IdentityHashMap تستخدم المفاتيح بناءً على مقارنة الهوية، وليس بناءً على القيمة الفعلية للمفتاح. بمعنى آخر، إذا كان لديك كائنين String يحملان نفس القيمة، فإن IdentityHashMap سيعتبرهما مفاتيح مختلفة إذا كانت هويتهما مختلفة.

التعديل التالي في الشيفرة قد يوضح هذا النقطة بشكل أفضل:

java
String key1 = new String("identityKey"); String key2 = new String("identityKey"); identityObject.put(key1, "Google"); identityObject.put(key2, "Facebook");

في هذه الحالة، key1 و key2 هما كائنين String مختلفين من حيث الهوية، ولكنهما يحملان نفس القيمة "identityKey". عند استخدام get("identityKey") في IdentityHashMap، ستكون الهوية هي التي تلعب دورًا أساسيًا، وسترجع القيمة بشكل صحيح.

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

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر