غالبًا ما تشتمل المقابلات الفنية على أسئلة تختبر فهمك لمجموعات ، وخاصة HashMaps. أحد التحديات الشائعة يتضمن حساب تكرارات العناصر داخل القائمة . يساعد هذا السؤال القائمين على المقابلات على تقييم قدرتك على التعامل مع تجميع البيانات بكفاءة وتجنب المخاطر مثل NullPointerException .
إذا كنت جديدًا في HashMaps، فقد ترغب في الاطلاع على Cracking the Basics of HashMap: المفاهيم الأساسية لمطوري Java للحصول على المعرفة الأساسية قبل الغوص في هذا المنشور.
في هذه التدوينة سنقوم بما يلي:
إرجاع كل رقم فريد مع عدد مرات ظهوره في القائمة. هذه مشكلة نموذجية تختبر فهمك لبنية بيانات HashMap وقدرتك على تنفيذها بكفاءة. إليك مثال:
مدخل
الإخراج
{1=2, 2=2, 3=1, 5=1}فارغة أو فارغة
، فيجب أن تُرجع النتيجة HashMap فارغة.
كمفتاح. إذا حدث ذلك، فإننا نزيد القيمة؛ إذا لم يحدث ذلك، نقوم بإدخال المفتاح بقيمة 1.
شفرةimport java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; public class CountNumbers { private HashMapgetCount(List list) { // Initialize HashMap to store number counts HashMap map = new HashMap(); // To avoid NullPointerException in case of a null list if (list != null) { // Iterate through each number in the list for (int num : list) { // If first occurrence, add number with count 1 if (!map.containsKey(num)) { map.put(num, 1); } else { // If the number already exists, increment its count by 1 map.put(num, map.get(num) 1); } } } return map; } public static void main(String[] args) { // Using ArrayList Parameterized Constructor with Collection as argument List numbers = new ArrayList(Arrays.asList(1, 2, 3, 5, 2, 1)); CountNumbers nums = new CountNumbers(); System.out.println(nums.getCount(null)); // Result -> {} System.out.println(nums.getCount(numbers)); // Result -> {1=2, 2=2, 3=1, 5=1} } }
:
: O(n) – في أسوأ الحالات، جميع الأرقام فريدة ومخزنة في HashMap.
للتعامل مع هذه المشكلة باستخدام طريقة getOrDefault(). إنه يلغي الحاجة إلى منطق if-else عن طريق إرجاع القيمة الافتراضية إذا لم يتم العثور على المفتاح في الخريطة.
تعريف الطريقةV getOrDefault(Object key, V defaultValue)
:
المفتاح: المفتاح الذي سيتم إرجاع قيمته المرتبطة به.: القيمة التي تم تعيين المفتاح المحدد لها، أو القيمة الافتراضية إذا كانت الخريطة لا تحتوي على تعيين للمفتاح.
شفرة
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; public class CountNumbers { private HashMapgetCount(List list) { // Initialize HashMap to store number counts HashMap map = new HashMap(); // To avoid NullPointerException in case of a null list if (list != null) { // Iterate through each number in the list for (int num : list) { // If first occurrence, add number with count 1 if (!map.containsKey(num)) { map.put(num, 1); } else { // If the number already exists, increment its count by 1 map.put(num, map.get(num) 1); } } } return map; } public static void main(String[] args) { // Using ArrayList Parameterized Constructor with Collection as argument List numbers = new ArrayList(Arrays.asList(1, 2, 3, 5, 2, 1)); CountNumbers nums = new CountNumbers(); System.out.println(nums.getCount(null)); // Result -> {} System.out.println(nums.getCount(numbers)); // Result -> {1=2, 2=2, 3=1, 5=1} } }
المنهج التقليدي | استخدام getOrDefault() | |
---|---|---|
مطول قليلاً مع منطق if-else | أنظف وأكثر إيجازًا | |
نفسه (O(n)) | نفسه (O(n)) | |
يعمل لجميع إصدارات جافا | يتطلب Java 8 أو أعلى |
يجعل الكود أكثر إيجازًا وقابلية للقراءة. يعد هذا السؤال من الأسئلة الشائعة في المقابلة الشخصية لأنه يقيم فهمك لـ HashMaps والتكرار والتعامل مع القيم الخالية. كما أنها ترتبط ارتباطًا وثيقًا بالمشكلات التي تتضمن عد التكرار وتجميع البيانات. إذا وجدت هذا المنشور مفيدًا، فتأكد من مراجعة المنشورات الأخرى في سلسلة أساسيات إطار عمل المجموعات أيضًا!
المشاركات ذات الصلة
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3