أسئلة وأجوبة مقابلة Hashmap [للمبتدئين وذوي الخبرة]
نشرت: 2020-09-24تعتبر فئة java.util.HashMap واحدة من أهم مكتبات Java. نادرًا ما يوجد أي مشروع مكتوب بلغة جافا ، ولا يستخدم مكتبة HashMap في تنفيذه. إنها الطريقة التي يتم بها تنفيذ بنية البيانات هذه ، مما يجعل هذا تقريبًا لا غنى عنه لأي برنامج متعلق بجافا. HashMap ، في تعريفه ، بسيط للغاية. HashMap هي بنية بيانات يتم تنفيذها باستخدام نهج جدولي للغاية.
يقال بحق أنه إذا كان هناك بنية بيانات واحدة فقط ، فيجب أن تكون HashMap. ليس هذا مفيدًا جدًا فحسب ، بل إنه فعال جدًا في الوقت أيضًا. يستغرق البحث البسيط في HashMap حوالي O (1) من الوقت (بمعنى أن كل عمليات البحث في HashMap تتم في وقت ثابت). ستجد العديد من تطبيقات HashMap في لغة برمجة Java ، مثل HashTable ، و concurrenthashmaps ، وما إلى ذلك. ومع ذلك ، إذا كنت تبحث عن تطبيق عام ، يجب ألا تبتعد عن HashMap الأساسي.
تأتي كل تطبيقات HashMap مع مجموعاتها الخاصة من الميزات وحالات الاستخدام. إذا كنت تريد الاحتفاظ بالترتيب الذي كتبت به التعيين ، فيجب أن تبحث عن استخدام HashMap المرتبط. إذا كنت ترغب في فرز الخرائط الخاصة بك ، فيجب عليك استخدام تطبيق TreeMap الخاص بـ HashMap ، والذي يقوم بالفرز نيابة عنك.
بطريقة مماثلة ، إذا كنت تبحث عن جدول تجزئة آمن للخيط ، والذي يمكن استخدامه أيضًا في تطبيق متزامن مع الحفاظ على قابلية التوسع ، فستبحث في HashMap متزامن.
كما ترى ، هناك العديد من الطرق التي يمكنك من خلالها استخدام HashMap. لتعرف حقًا أهمية HashMap ، يجب أن ترى أسئلة المقابلة لأي ملف تعريف وظيفي لهندسة البرمجيات. لن تكون قادرًا على تحسين الوقت بشكل صحيح إذا كنت لا تعرف كيفية تنفيذ HashMap بشكل صحيح. لذلك ، إذا كنت مبرمجًا ، فلا يمكنك الابتعاد عن تعلم خصوصيات وعموميات HashMap. لذلك قمنا بإدراج بعض أسئلة مقابلة hashmap المعلقة أدناه ، والتي من شأنها أن تساعدك على الاستعداد لمقابلتك القادمة.
تعلم دورة علوم البيانات عبر الإنترنت من أفضل الجامعات في العالم. اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.
جدول المحتويات
أسئلة وأجوبة مقابلة Hashmap
س 1. كيف ستستخدم طريقة put () الخاصة بـ HashMap في Java؟
الجواب. تعمل طريقة put () ببساطة عن طريق الاستفادة من المبدأ المعروف باسم التجزئة. يمكنك الاستفادة من هذه الوظيفة لتخزين الكائن المعني في الواجهة الخلفية (وهي مجموعة من الذاكرة). سيتعين عليك استخدام دالة أخرى مع وظيفة put () هذه لتتمكن من التأكد من الموضع الدقيق لهذا الكائن في الواجهة الخلفية. تُستخدم وظيفة hashcode () كوظيفة مساعد لوضع () بالطريقة التي وصفناها سابقًا.
لذا ، فإن الطريقة التي تعمل بها هاتان الوظيفتان معًا هي أنهما يذهبان ويبحثان عن المفتاح المتاح وموقع الذاكرة في الواجهة الخلفية. إذا حدث تصادم ، فسيتم إضافة الكائن الذي يحتوي على كلتا القيمتين (بمعنى قيم كل من المفتاح والقيمة) إلى التنفيذ الديناميكي للقائمة ، والمعروف أيضًا باسم القائمة المرتبطة. يتم تخزين قائمة الإعجابات هنا في موقع الذاكرة ، والذي تم العثور عليه مسبقًا.
س 2. ما هي الاحتياجات الأساسية التي يحتاجها الكائن حتى يتم استخدامه كمفتاح أو قيمة لـ HashMap؟
الجواب. يجب أيضًا كتابة هاتين الوظيفتين في كل من المفتاح والقيمة التي نستخدمها في أي HashMap وتنفيذها. اسم هاتين الوظيفتين يساوي () و hashcode (). يتم استخدام الوظيفة التي تحمل اسم رمز التجزئة () عندما نقوم بإدخال قيمة المفتاح في أي HashMap. في الوقت نفسه ، يتم استدعاء وظيفة يساوي () فقط عندما نحاول استعادة القيمة التي تم تخزينها بالفعل في HashMap.
س 3. لنفترض أنك فقدت مسار المفاتيح التي استخدمتها بالفعل في HashMap الخاص بك. المفتاح التالي الذي تريد إضافته موجود بالفعل في HashMap. ما رأيك سيحدث في هذه الحالة؟
الجواب. إذا شعرت أنه يجب أن يكون هناك خطأ ، فلن تكون مخطئًا إذا لم نتحدث عن HashMap. ومع ذلك ، إذا كنت تستخدم HashMap وحدثت أنك أدخلت مفتاحًا كانت قيمته موجودة بالفعل في علامة التجزئة ، فلن يتسبب برنامج التحويل البرمجي java في أي خطأ. بدلاً من ذلك ، ما سيحدث هو أن المترجم سيذهب فقط ويجد القيمة المرتبطة بالمفتاح الذي أدخلته ، وسيقوم بتحديث القيمة هناك فقط.
إذا كنت تستخدم الوظيفة put () لإضافة القيمة إلى hashmap ، فستكون القيمة المرجعة لهذه الوظيفة هي القيمة القديمة المرتبطة بهذا المفتاح. لذلك ، لنفترض أنه بالنسبة للمفتاح A ، لديك قيمة مخزنة تبلغ 1. إذا وضعت الآن قيمة A لتكون ، دعنا نقول 50 ، فإن القيمة التي ستعيدها الدالة put () ستكون 1 ، والقيمة النهائية المخزنة في المفتاح A ستكون 50.
س 4. في حالة الحاجة إلى تخزين قيمة فارغة. هل ستكون قادرًا على استخدام HashMap في هذه الحالة؟
الجواب. نعم ، سنكون قادرين على استخدام hashmap في هذه الحالة دون أي مشاكل لأن hashmaps لا تقلل من القيمة التي يمكنك تخزينها. يمكنك تخزين العديد من القيم الفارغة كما يرغب قلبك في أي hashmap.
س 5. كيف يتم التعامل مع التصادم مع تطبيق hashmap في Java؟
الجواب. تستخدم مكتبة التعليمات البرمجية الخاصة بـ java.util.HashMap طريقة التسلسل لمعالجة التصادمات. الطريقة التي يعمل بها هذا التسلسل هي أي إدخال جديد إلى hashmap ، والذي يحتوي على كل من المفتاح وزوج القيمة سيتم تخزينه في قائمة مرتبطة ، وسيتم بعد ذلك تخزين هذه القائمة حيث توجد البيانات الحالية لخرائط التجزئة (موقع الحاوية) .
في حالة ما إذا كانت جميع المفاتيح الموجودة في علامة التجزئة الخاصة بك تحتوي على نفس رمز التجزئة ، فلن تكون علامة التجزئة الخاصة بك مرة أخرى. سيتم تحويله إلى قائمة مرتبطة. سيزداد وقت البحث بترتيب واحد (o (1)) ، أي الوقت الثابت ، إلى ترتيب N (O (N)) وهو الوقت الخطي.
س 6. هل ستكون قادرًا على تخزين مفتاح يحتوي على قيمة فارغة في تطبيق Java لـ hashmap؟
الجواب. نعم ، عند تنفيذ Java لـ hashmap ، ستتمكن من تخزين المفاتيح بقيمة فارغة. لكنك لن تكون قادرًا إلا على تخزين مفتاح واحد فقط من هذا القبيل ، والذي سيتم تخزينه دائمًا في بداية قائمة المجموعات. لن يقوم hashmap باستدعاء دالة hashcode () هنا لأنه إذا تم استخدام هذه الوظيفة على مفتاح فارغ ، فسيؤدي ذلك إلى ظهور خطأ Null Pointer Exception. سيتعين عليك استخدام وظيفة get بدلاً من استخدام القيمة الخالية كمفتاح إذا كنت تريد إرجاع الفهرس الأول لعلامة التجزئة الخاصة بك إليك.

قراءة: الفرز في بنية البيانات: الفئات والأنواع
س 7. ما هي بنية البيانات التي تعتقد أنها مصممة لتقليدها؟
الجواب. من المفترض أن يحاكي الهاشمب شكل ووظائف هيكل بيانات جدول التجزئة. هيكل بيانات جدول التجزئة هو خيارك المثالي إذا كنت تريد تخزين القيم في شكل زوج مفتاح وقيمة. السبب الرئيسي وراء تفضيل جدول التجزئة هذا هو وقت البحث. لذلك ، إذا كان لديك المفتاح الذي تريد البحث عنه ، فبترتيب واحد أو وقت ثابت فقط ، ستتمكن من استعادة القيمة التي تريدها.
س 8. نظرًا لأن hashmap ليس أحد هياكل البيانات الأساسية مثل البنية أو المصفوفات. ما الذي تعتقد أنه يحدث تحت الغطاء كلما قمت بإنشاء علامة التجزئة؟ ما تركيبة بنية البيانات التي تعتقد أنها أعطتنا علامات التجزئة؟
الجواب. على الرغم من أن الهاشمب يمثل في الواقع قابلاً للتجزئة ، إلا أنه لا يتم تنفيذه بشكل مباشر تحت الغطاء. نحن نستخدم هيكلين معروفين للبيانات لتنفس الحياة في الهاشمب. نحن نستخدم قائمة ومصفوفات مرتبطة. يتم استخدام القائمة المرتبطة لتخزين زوج المفتاح والقيمة ديناميكيًا ، ويتم استخدام المصفوفة لتخزين كل هذه القوائم المرتبطة فيها ؛ معًا ، يشكلون الهاشمب.
من Java 8 ، إذا أصبحت القائمة المرتبطة كبيرة بدرجة كافية ، فبدلاً من القائمة المرتبطة ، تنفذ Java شجرة بحث ثنائية بدلاً من القائمة. يتم إجراء هذا التغيير لتوفير الوقت وتحسين الأداء العام لـ hashmap.
اقرأ أيضًا: أسئلة مقابلة علوم البيانات
س 9. في حال أردنا تخزين قيم متعددة تحت نفس المفتاح ، هل تعتقد أنه سيكون من الممكن في تطبيق hashmap الموجود في Java؟
الجواب. لا ، لن تتمكن من تخزين المفاتيح المكررة في علامة التجزئة. إذا حاولت تخزين قيمة جديدة في مفتاح موجود بالفعل في علامة التجزئة ، فإن علامة التجزئة ستزيل ببساطة القيمة التي تم تخزينها مسبقًا في هذا المفتاح واستبدالها بالقيمة الجديدة.
لن يتغير حجم علامة التجزئة في هذه الحالة ، مما يعني أنه لن يكون هناك إضافة مفاتيح إلى علامة التجزئة. هذه الميزة هي أحد الأسباب التي تجعلنا نستخدم مجموعة المفاتيح الوظيفية () لاستعادة جميع مفاتيح التجزئة وأن هذه الوظيفة تُرجع مجموعة وليست مجموعة (لأنه في مجموعة يجب أن تكون جميع القيم فريدة).
س 10. هل ستكون قادرًا على تخزين القيم المكررة في HashMap؟
الجواب. نعم ، ستتمكن من تخزين القيم المكررة في علامة التجزئة. هذا هو سبب استرداد جميع القيم من علامة التجزئة. ثم بدلاً من الحصول على مجموعة ، نحصل على مجموعة. لا يعطي القيمة في شكل قائمة لأن الطلب غير مضمون.
س 11. في تطبيق Java لـ hashmap ، هل هو آمن للخيط؟
الجواب. لا ، الفانيليا Hashmap ليست آمنة على الإطلاق في Java. من الناحية المثالية ، يجب أن تتجنب مشاركة علامة التجزئة مع سلسلة رسائل يمكنها تغيير القيمة وتحرير التجزئة بأي شكل أو شكل. ومع ذلك ، يمكنك استخدام علامة التجزئة للقراءة فقط ثم إدخالها في سلسلة الرسائل. بهذه الطريقة ، لن تتغير القيم الواردة فيها.
س 12. ما رأيك سيحدث إذا استخدمنا علامة التجزئة في تطبيق يستخدم خيوط متعددة؟
الجواب. إذا قمت بتمرير hashmap إلى تطبيق يستخدم أكثر من مؤشر ترابط واحد ، ويمكن لكل من هذه الخيوط تعديل أو إضافة أو إزالة القيم المخزنة في hashmap ، فستتلف البيانات الداخلية التي تم من خلالها إنشاء hashmap . ستفقد الروابط التي تم استخدامها لتشكيل hashmap ، وبعد ذلك ستفقد hashmap هيكلها ، وسيتم فقدان الغرض منها أيضًا. ومن ثم يوصى دائمًا باستخدام hashmap الآمن للخيط دائمًا إذا كنت ستستخدمها في تطبيق مترابط.
س 13. إذا أردنا تكرار خريطة HashMap بالكامل في Java. ما هي الطرق المختلفة التي يمكننا من خلالها القيام بذلك؟
الجواب. هناك العديد من الطرق التي يمكنك من خلالها تكرار التجزئة في جافا ؛ بعضها مذكور أدناه:
- يمكنك استخدام مفتاح الوظيفة إلى جانب متغير متكرر.
- يمكنك استخدام الدالة enterySet إلى جانب متغير متكرر.
- يمكنك استخدام وظيفة entrySet واستخدامها مع حلقة محسّنة.
- يمكنك استخدام keySet والحصول على طريقة.
اقرأ أيضًا: هياكل البيانات والخوارزمية في Python: كل ما تحتاج إلى معرفته
ماذا بعد؟
إذا كنت مهتمًا بالتعرف على علوم البيانات ، فراجع برنامج IIIT-B & upGrad التنفيذي PG في علوم البيانات الذي تم إنشاؤه للمهنيين العاملين ويقدم أكثر من 10 دراسات حالة ومشاريع ، وورش عمل عملية عملية ، وإرشاد مع خبراء الصناعة ، 1 - في 1 مع موجهين في الصناعة ، أكثر من 400 ساعة من التعلم والمساعدة في العمل مع الشركات الكبرى.
كيف يختلف Hashtable عن HashMap؟
بنية البيانات غير المتزامنة هي HashMap. من ناحية أخرى ، يعد Hashtable آمنًا لمؤشر الترابط ويمكن مشاركته عبر العديد من سلاسل الرسائل دون الحاجة إلى رمز التزامن. لا يسمح Hashtable بمفتاح واحد فارغ أو قيم فارغة متعددة ، لكن HashMap يسمح بذلك. يجب استخدام HashMap بدلاً من Hashtable في التطبيقات غير المترابطة. ببساطة ، يجب استخدام HashMap في التطبيقات ذات الخيوط الواحدة أو التطبيقات غير المتزامنة.
هل من الأسرع استخدام HashMap أو TreeMap؟
في TreeMap ، يتم تحديد القيم بواسطة المفتاح. لا يمكن أن يحتوي على مفتاح فارغ ، ولكن يمكن أن يحتوي على قيم فارغة متعددة. إنه مطابق لـ HashMap ، باستثناء أنه بدلاً من الترتيب التصاعدي ، فإنه يحتفظ بترتيب تصاعدي (مرتبة باستخدام الترتيب الطبيعي لمفتاحه). تستخدم HashMap بنية بيانات قائمة على المصفوفة لتنظيم مكوناتها وفقًا لوظيفة التجزئة كتطبيق قائم على التجزئة. بالنسبة لمعظم العمليات مثل إضافة () ، وحذف () ، واحتواء ، يتنبأ HashMap بأداء الوقت الثابت لـ O (1) (). نتيجة لذلك ، فهو أسرع بكثير من TreeMap.
متى يكون من الأفضل استخدام HashMap بدلاً من ArrayList؟
فقط عندما تتوفر مفاتيح فريدة للبيانات التي نرغب في تخزينها ، يكون HashMap منطقيًا. عند البحث عن أشياء بناءً على مفتاح ، يجب أن نستخدمه لأن وقت الوصول السريع أمر لا بد منه. عندما يكون الاحتفاظ بنفس ترتيب الإدخالات في مجموعة أمرًا بالغ الأهمية ، يجب أن نتجنب HashMap. كلاهما متميزان عن بعضهما البعض ويخدمان أغراضًا مميزة. إذا كنت تريد تخزين كائنات في Java ، فاستخدم HashMap لتعيين مفاتيح القيم و ArrayList بخلاف ذلك.