لقد واجهت هذا السؤال في أحد الاختبارات وأرغب في مشاركته معك. السؤال هو كما يلي: هناك متغيران من السلسلة x وy. عندما يكون (x.equals(y) == true)، هل توجد السلسلتان تطبيقات مختلفة لرمز التجزئة، هل الحكم صحيح؟ الإجابة: خطأ، لديهم نفس قيمة رمز التجزئة. التحليل: يتناول هذا السؤال بشكل أساسي طريقة الوصول إلى كائنات السلسلة. أولاً، يجب علينا توضيح قيمة رمز التجزئة لمتغير السلسلة؟ يتم تخزين حالة كائن السلسلة المخزنة في الذاكرة في جدول التجزئة. عند إنشاء سلاسل مختلفة، ستتوافق مع رمز التجزئة. يتم الحصول على رمز التجزئة للسلسلة من خلال طريقة hashCode () التي تُرجع التجزئة من السلسلة. يتم حساب رمز التجزئة لكائن السلسلة وفقًا للصيغة التالية: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1 ] ملاحظة: استخدم خوارزمية int، حيث s[i] هو الحرف i للسلسلة، وn هو طول السلسلة، و^ يعني الأسي. (قيمة التجزئة لسلسلة فارغة هي 0.) ترث طريقة hashCode() في بيانات نوع السلسلة طريقة hashCode() في فئة Object، والغرض الرئيسي منها هو تحسين أداء جدول التجزئة (java.util.Hashtable). . تحسين كفاءة الوصول. عند ظهور سلسلتين تعريفيتين متطابقتين، لن تتم إعادة إنشاء مثيل كائن جديد، ولكن سيتم إرجاع رمز التجزئة الموجود وتمريره إلى المرجع المقابل. دعنا نقدم الاتفاقية العامة لـ HashCode، وهي تقريبًا كما يلي: أثناء تنفيذ تطبيق Java، عندما يتم استدعاء أسلوب hashCode على نفس الكائن مرتين، يجب إرجاع نفس العدد الصحيح بشكل متسق، بشرط أن تكون المعلومات المستخدمة عند مقارنة لم يتم تعديل الكائن يساوي. لا يلزم أن يظل هذا العدد الصحيح كما هو من تنفيذ تطبيق ما إلى تنفيذ آخر لنفس التطبيق. إذا كان هناك كائنان متساويان وفقًا لطريقة التساوي (الكائن)، (ملاحظة: هذا السؤال هو مثال نموذجي)، فيجب إنشاء نفس العدد الصحيح عند استدعاء طريقة hashCode () في كل من الكائنين. إذا لم يكن الكائنان متساويين وفقًا لطريقة يساوي (java.lang.Object)، فإن استدعاء طريقة hashCode() على أي من الكائنين لا يؤدي بالضرورة إلى إنشاء نتائج أعداد صحيحة مختلفة. ومع ذلك، في التطبيقات العملية، يمكن أن يؤدي إنشاء نتائج أعداد صحيحة مختلفة لكائنات مختلفة إلى تحسين أداء جداول التجزئة.
هذه المقالة مأخوذة من مدونة CSDN، يرجى الإشارة إلى المصدر عند إعادة الطباعة: http://blog.csdn.net/ComputerHeart/archive/2009/12/18/5030719.aspx.
-