الاختلافات بين HashMap و HashTable في Java
نشرت: 2021-06-02إذا كنت تتعرف على Java وتطبيقاتها ، فيجب أن تكون قد صادفت HashMap و HashTable. كلاهما من بين أهم الفئات في إطار عمل مجموعة جافا. ستستخدمها على نطاق واسع أثناء التطوير باستخدام Java ، وهذا هو سبب أهمية فهم اختلافاتهم.
في النقاط التالية ، سنغطي موضوع HashTable vs HashMap بالتفصيل ونوضح الفروق بين الاثنين:
جدول المحتويات
ما هو HashMap؟
كان HashMap في مجموعة Java منذ تقديم Java 1.2. يسمح لك بتنفيذ التطبيقات الأساسية لواجهة Map في Java. يخزن HashMap البيانات في أزواج (مفتاح ، قيمة) ، وللوصول إليها ، سيتعين عليك استخدام فهرس من نوع آخر ، مثل عدد صحيح.
هنا ، يمكنك استخدام كائن واحد كمفتاح (فهرس) لكائن آخر (قيمة) ، ومن ثم استخدام زوج (مفتاح ، قيمة). إذا أضفت مفتاحًا مكررًا ، فسيحل محل عنصر المفتاح المقابل.
ميزات HashMap
لفهم الفروق بين HashTable و HashMap ، أولاً ، يجب أن تفهم ميزاتها. سيجعلك هذا على دراية بأساسيات كل منهما. يحتوي HashMap على الميزات التالية:
- وهو جزء من حزمة java.util.
- إنه يمتد إلى فئة مجردة AbstractMap التي توفر تنفيذًا غير كامل لواجهة الخريطة.
- إلى جانب تنفيذ واجهة الخريطة ، فإنه يقوم أيضًا بتنفيذ واجهات قابلة للتسلسل و Cloneable.
- يسمح بقيم مكررة لكنه لا يسمح بالمفاتيح المكررة. هذا يعني أنه لا يمكن أن يحتوي مفتاح واحد على أكثر من قيمة واحدة ، ولكن يمكن أن يكون للمفاتيح المتعددة قيمة واحدة.
- يمكنك استخدام المفتاح الفارغ مرة واحدة فقط في HashMap ، ولكن يمكنك استخدام قيم فارغة متعددة.
- لا تقدم أي ضمانات بشأن ترتيب الخريطة ، لا سيما ما إذا كان الترتيب سيظل ثابتًا أم لا بمرور الوقت. يشبه HashMap تقريبًا HashTable ولكنه غير متزامن.
- يستخدم HashSet HashMap داخليًا.
ما هو HashTable؟
يمكنك استخدام فئة HashTable لتنفيذ جدول تجزئة يعيّن المفاتيح إلى القيم. هنا ، يمكنك استخدام كائنات غير خالية كمفتاح أو كقيمة. ضع في اعتبارك أنه لتخزين واسترداد العناصر من علامة التجزئة بنجاح ، يجب أن تنفذ الكائنات التي استخدمتها كمفاتيح طريقة hashCode وطريقة equals.
يخزن جدول التجزئة البيانات بتنسيق مصفوفة ، ولكل قيمة بيانات قيمة فهرس فريدة. يتيح لك هذا الوصول إلى بيانات معينة بسرعة كبيرة إذا كنت تعرف الفهرس المطلوب.
ميزات HashTable
يحتوي HashTable على ميزاته الخاصة ، تمامًا مثل HashMap. ومع ذلك ، فإن هذه الميزات تجعلها فريدة ومختلفة عن HashMap في كثير من النواحي:
- HashTable يشبه إلى حد بعيد HashMap ولكنه متزامن.
- يقوم بتخزين أزواج القيمة الرئيسية في جدول تجزئة.
- هنا ، تحدد كائنًا يستخدم كمفتاح والقيمة التي تريد ربطها به. ثم تقوم بتجزئة المفتاح واستخدام كود التجزئة الذي تم إنشاؤه كفهرس حيث تقوم بتخزين القيمة داخل الجدول.
- السعة الافتراضية لفئة Hashtable هي 11 ، وعامل الحمولة هو 0.75.
- لا تقدم HashMap التعداد ، في حين أن Hashtable لا تقدم التعداد السريع.
الاختلافات بين HashMap و HashTable
الآن بعد أن تعرفت على الملامح المميزة لـ HashMap و HashTable ، سنقارنهم الآن ونرى الاختلافات البارزة بين الاثنين:
خريطة التجزئة | HashTable |
إنه غير متزامن. لا يمكنك مشاركة العديد من سلاسل الرسائل هنا بدون استخدام رمز التزامن المناسب لأنه ليس آمنًا لمؤشر الترابط. | إنها متزامنة. يمكنك مشاركته مع العديد من سلاسل الرسائل لأنه آمن للخيط. |
يرث فئة AbstractMap. | يرث فئة القاموس. |
هنا ، التكرار يسقط بسرعة. | في HashTable ، العداد ليس سريعًا. |
يجتاز التكرارات HashMap. | يقوم العداد والمكرر باجتياز HashTable. |
يمكنك إجراء مزامنة HashMap عن طريق استدعاء الرمز الخريطة م = Collections.synchronisedMap (hashMap) ؛ | تتم مزامنة جداول التجزئة داخليًا ، ولا يمكنك إلغاء مزامنتها مع أي رمز. |
إنه سريع جدًا. | إنه أبطأ نسبيًا من HashMap. |
HashMap هي فئة جديدة وقد تم تقديمها مؤخرًا في JDK 1.2. | HashTable هي فئة قديمة. |
يسمح بقيم فارغة متعددة ومفتاح واحد فارغ. | لا يسمح بأي قيم فارغة أو مفتاح. |
مثال الترميز
فيما يلي مثال على HashMap و HashTable في العمل حتى تتمكن من فهم الفروق بين HashMap و HashTable.
إدخال:
استيراد java.util. * ؛
استيراد java.lang. * ؛
استيراد java.io. * ؛
JavaTester للطبقة العامة {
العامة الثابتة الفراغ الرئيسي (سلاسل سلسلة []) {
Hashtable ht = new Hashtable () ؛
ht.put (1، "عدي")؛
ht.put (1، "Ujjwal") ؛
ht.put (2، "Sumit") ؛
ht.put (3، "Vijay") ؛
System.out.println (“————- Hash table ————–“) ؛
تعيين <Integer> keySet = ht.keySet () ؛
لـ (مفتاح صحيح: keySet) {
System.out.println (مفتاح + "" + ht.get (مفتاح)) ؛
}
HashMap hm = new HashMap () ؛
hm.put (0، "عدي")؛
hm.put (4، "عدي") ؛ // يمكن أن يكون لديك قيم مكررة في علامة التجزئة
hm.put (1، "Sumit") ؛
hm.put (2، "Vijay") ؛
System.out.println ("———– Hash map ———–") ؛
اضبط <Integer> keySet1 = ht.keySet () ؛
لـ (مفتاح صحيح: keySet) {
System.out.println (مفتاح + "" + hm.get (مفتاح)) ؛
}
}
}
انتاج:
جدول تجزئة:
3 فيجاي
2 سوميت
1 أوجوال
خريطة التجزئة:
0 عدي
1 سوميت
2 فيجاي
4 عدي
متى تستخدم HashMap مقابل HashTable؟
العامل الأساسي الذي يحدد ما إذا كنت ستستخدم HashMap أو HashTable هو المزامنة. إذا كنت بحاجة إلى مهمة ذات مؤشر ترابط آمن ، فيجب عليك استخدام HashTable لأن جميع أساليبها متزامنة. ومع ذلك ، فهي فئة موروثة ، ويجب تجنبها.
إذا كانت لديك بيئة متعددة مؤشرات الترابط ، فيجب عليك استخدام ConcurrentHashMap لأنها تشبه إلى حد كبير HashTable. يسمح لك بإجراء مزامنة HashMap بشكل صحيح.
تتسبب العمليات المتزامنة في ضعف الأداء ، لذا يجب تجنبها في معظم الحالات. علاوة على ذلك ، يعد HashMap مناسبًا لبيئة غير مترابطة ، بحيث يمكنك استخدامها بسهولة.
تعلم دورات البرمجيات عبر الإنترنت من أفضل الجامعات في العالم. اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.
خاتمة
HashMap و HashTable هما أكواد Java شائعة ذات وظائف مماثلة. ومع ذلك ، كما ترى ، هناك العديد من الاختلافات البارزة بين الاثنين. HashMap هي فئة Java ، بينما HashTable هي بنية بيانات.
إذا كنت مهتمًا بمعرفة المزيد عن Java ولغات البرمجة الأخرى ، فإننا نوصي بمراجعة برنامج Executive PG الخاص بنا في تطوير البرامج مع التخصص في تطوير Full Stack .
ما هو جدول التجزئة؟
جدول التجزئة هو هيكل بيانات حاوية يستخدم على نطاق واسع في برمجة الكمبيوتر. تُستخدم جداول التجزئة للاحتفاظ بأزواج القيمة الرئيسية ، حيث يمكن أن يكون المفتاح أي كائن. كحاوية ، يجب أن يدعم جدول التجزئة عمليات الإدراج والإزالة. كأداة بحث ، يجب أن يدعم جدول التجزئة تشغيل get. إذا كان من المفترض أن يكون جدول التجزئة عبارة عن بنية بيانات قاموس ، فيجب أن يدعم أيضًا تشغيل يحتوي على. لذلك ، بشكل عام ، يعد جدول التجزئة عبارة عن بنية بيانات تُستخدم على نطاق واسع لتنفيذ عمليات الإدراج والإزالة والحصول والاحتواء بشكل فعال. يستخدم جدول التجزئة على نطاق واسع بسبب أدائه السريع.
ما هو إطار عمل المجموعات في Java؟
Java Collections Framework عبارة عن مجموعة من الواجهات والفئات والخوارزميات لمنصة Java Platform. لقد كان جزءًا من Java Platform منذ الإصدار 1.2. يتضمن واجهات للحاويات والقوائم وقوائم الانتظار وما إلى ذلك ، ولكنه يتضمن أيضًا فئات للتعامل مع التواريخ والأوقات ، وفصلًا للتعامل مع التعبيرات العادية ، وآخر للتعامل مع التدويل ، وآخر للتعامل مع البحث في الملفات.
ما هي العلاقة بين علامة التجزئة وعلامة التجزئة في جافا؟
علامة التجزئة هي بنية بيانات خاصة تربط المفاتيح بالقيم. يمكن أن تكون المفاتيح أي كائن ، ولكن يجب أن تكون جميع المفاتيح في جدول تجزئة معين قابلة للمقارنة مع بعضها البعض (أي ، استخدم نفس الواجهات أو واجهات متوافقة). في Java ، الخريطة هي نوع محدد من علامات التجزئة التي يتم تنفيذها باستخدام TreeMap. يجب أن تنفذ المفاتيح الموجودة في الخريطة طريقة يساوي ، وتستخدم الخريطة هذه الطريقة لتحديد ما إذا كان مفتاحان متساويين أم لا. هذا يعني أنه يتم تخزين المفاتيح فقط في الخريطة ، ويتم حساب القيمة المرتبطة بها كلما دعت الحاجة.