الفرق بين HashMap و Hashtable في جاوة
المحتوى
HashMap و Hashtable ، وكلاهما يستخدم لتمثيل أ مجموعة من الأشياء التي يتم تمثيلها في
لننظر إلى مقارنة الرسم البياني الموضح أدناه لمعرفة المزيد من الاختلافات بين HashMap و Hashtable.
- رسم بياني للمقارنة
- تعريف
- الاختلافات الرئيسية
- التشابه
- خاتمة
رسم بياني للمقارنة
أساس للمقارنة | خريطة التجزئة | جدول هاش |
---|---|---|
تنفيذ / تمديد | تطبق فئة HashMap واجهة Map وتوسع فئة AbstractMap. | يمتد Hashtable من فئة Dictionary Legacy ، لكن ، تمت إعادة تصميمه والآن يقوم أيضًا بتنفيذ واجهة Map. |
تزامن | HashMap غير متزامن ، وبالتالي ، فإن كائن HashMap غير آمن. | تتم مزامنة Hashtable ، وبالتالي ، فإن كائن Hashtable آمن في سلسلة الرسائل. |
مفاتيح / القيمة | يمكن أن يُرجع المفتاح Null مرة واحدة فقط ، لكن يمكن أن تُرجع القيمة Null أي عدد من الوقت. | لا يمكن أن يُرجع المفتاح Null لأنه يُستخدم للحصول على رمز التجزئة الذي سيتم استخدامه ك فهرس لجدول التجزئة ، ولا يمكن أن تُرجع القيمة Null. |
القدرة الأولية الافتراضية | السعة المبدئية الافتراضية لـ HashMap هي 16. | السعة المبدئية الافتراضية لـ Hashtable هي 11. |
العبور | يتم اجتياز HashMap بواسطة Iterator. | مثل Map class Hashtable أيضًا لا يدعم Iterator مباشرة من أجل اجتيازه ، وبالتالي ، فإنه يستخدم Enumerator. |
تعريف HashMap
HashMap هي الفئة التي تنفذ خريطة واجهة ويمتد AbstractMap يستخدم الفصل جدول التجزئة. يشير كائن HashMap إلى مجموعة / مجموعة من / * K يمثل المفتاح ، ويمثل V القيمة * / class HashMap المُنشئ الأول هو مُنشئ افتراضي يقوم بتهيئة كائن فارغ من HashMap بسعة افتراضية تبلغ 16 ونسبة تعبئة افتراضي قدرها 0.75. يقوم المُنشئ الثاني بتهيئة خريطة التجزئة بقيمة m. ينشئ المُنشئ الثالث خريطة تجزئة ذات السعة الأولية المقابلة للقيمة الواردة في الوسيطة "السعة". يقوم المُنشئ الرابع بتهيئة خريطة التجزئة بسعة ونسبة تعبئة متوفرة في المعلمات. دعونا الآن نتعلم كيفية تغذية الإدخالات في خريطة التجزئة. Hashmap hm = new Hashmap ()؛ hm.put ("Ajay"، 275)؛ hm.put ("Vijay"، 250)؛ hm.put ("Jonny"، 150) ؛ hm.put ("Jordan"، 200)؛ System.out.ln (hm) ؛ / * output * / {Vijay = 250 ، Jonny = 150 ، Ajay = 275 ، Jordan = 200} في الرمز أعلاه ، يمكنك أن ترى أنني قمت بإنشاء كائن HashMap فارغ جلالة مع السعة الأولية الافتراضية ونسبة التعبئة الافتراضية. ثم أدخلت أربعة إدخالات في خريطة التجزئة باستخدام طريقة put (K ، V) التي تحدد مفتاح القيمة. يمكنك ملاحظة أن الإدخالات لا يتم إدارتها في تسلسل تقوم بإطعامهم لأن ترتيب الإدراج غير ثابت. الآن ، ضع في اعتبارك حالة لديك بالفعل إدخال Hashtable هي الفئة التي تمتد قاموس الفئة التي هي فئة إرث وإعادة هندستها لتنفيذ خريطة واجهه المستخدم. يستخدم Hashtable جدول التجزئة مثل بنية البيانات الخاصة به. يشبه Hashtable HashMap حيث يشير أيضًا كائن Hashtable إلى مجموعة الإدخالات حيث يكون كل إدخال زوجًا من / * K تحدد المفتاح و V تحدد القيمة المرتبطة بـ * / class Hashtable في التعليمة البرمجية أعلاه ، فإن المُنشئ الأول هو مُنشئ افتراضي يُنشئ كائنًا فارغًا من فئة Hashtable ، وحجمه الافتراضي هو 11 ونسبة التعبئة الافتراضية هي 0.75. ينشئ المُنشئ الثاني جدول تجزئة بالحجم المقابل للقيمة الواردة في المعلمة "الحجم". ينشئ المُنشئ الثالث جدول تجزئة مع حجم ونسبة تعبئة متوفرة في المعلمة. المُنشئ الرابع تهيئة جدول التجزئة بالقيمة m. دعونا الآن نتعلم كيفية إدراج Hashtable ht = new Hashtable ()؛ ht.put (new hashCode (2)، 275)؛ ht.put (new hashCode (12)، 250)؛ ht.put (new hashCode (16)، 150)؛ ht.put (new hashCode (8)، 200)؛ System.out.ln (ht)؛ / * الإخراج * / {12 = 250 ، 16 = 150،2y = 275 ، 8 = 200} في التعليمة البرمجية أعلاه ، قمت بإنشاء كائن فارغ من Hashtable وأدخلت أربعة إدخالات باستخدام طريقة put (). من الداخل وضعت طريقة ودعا hashCode () الذي يحسب وإرجاع قيمة رمز التجزئة والتي ستكون بمثابة قيمة الفهرس لكائن الإدخال. كما ترى ، لم أذكر حجم جدول التجزئة ، وبالتالي سيكون 11 افتراضيًا. هنا أيضًا ، لا يتم الاحتفاظ بترتيب الإدراج وبالتالي ، عندما لم تظهر إدخالات ed بالتسلسل. HashMap أفضل في الأداء حيث أن كائناته غير متزامنة ويمكن أن تعمل مؤشرات ترابط متعددة عليه في نفس الوقت وبالتالي فهي أسرع من Hashtable.
تعريف Hashtable
التشابه:
خاتمة: