"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > हैशमैप्स इन एक्शन: एक सामान्य जावा साक्षात्कार चुनौती से निपटना

हैशमैप्स इन एक्शन: एक सामान्य जावा साक्षात्कार चुनौती से निपटना

2024-11-07 को प्रकाशित
ब्राउज़ करें:718

HashMaps in Action: Tackling a Common Java Interview Challenge

तकनीकी साक्षात्कार में अक्सर ऐसे प्रश्न होते हैं जो संग्रह, विशेष रूप से हैशमैप्स के बारे में आपकी समझ का परीक्षण करते हैं। एक आम चुनौती में किसी सूची में तत्वों की घटनाओं की गिनती करना शामिल है। यह प्रश्न साक्षात्कारकर्ताओं को डेटा एकत्रीकरण को कुशलतापूर्वक संभालने करने की आपकी क्षमता का आकलन करने और NullPointerException जैसे नुकसान से बचने में मदद करता है।

यदि आप हैशमैप्स में नए हैं, तो आप इस पोस्ट पर ध्यान देने से पहले मूलभूत ज्ञान के लिए मेरी हैशमैप की मूल बातें क्रैक करना: जावा डेवलपर्स के लिए मुख्य अवधारणाएं देखना चाहेंगे।

इस पोस्ट में, हम:

  • समस्या विवरण का विस्तार से अन्वेषण करें।
  • इसे दो दृष्टिकोणों से हल करें: एक पारंपरिक यदि-अन्यथा समाधान और getOrDefault() विधि
  • दोनों कार्यान्वयन की समय और स्थान जटिलता पर चर्चा करें।
  • दोनों समाधानों की एक तुलना, जिसमें प्रत्येक का उपयोग कब करना है।

समस्या का विवरण

आपको पूर्णांकों की एक सूची दी गई है, और आपका कार्य सूची में प्रत्येक अद्वितीय संख्या को उसकी घटनाओं की गिनती के साथ लौटाना है। यह एक विशिष्ट समस्या है जो हैशमैप डेटा संरचना के बारे में आपकी समझ और इसे कुशलतापूर्वक लागू करने की आपकी क्षमता का परीक्षण करती है।

यहां एक उदाहरण है:

इनपुट:

[1, 2, 3, 5, 2, 1]

आउटपुट:

{1=2, 2=2, 3=1, 5=1}
{1=2, 2=2, 3=1, 5=1}
यदि

इनपुट सूची शून्य या खाली है, तो परिणाम को एक खाली हैशमैप लौटाना चाहिए।


समाधान 1: अन्यथा का उपयोग करते हुए पारंपरिक दृष्टिकोण

इस समाधान में, हम

मैन्युअल रूप से जांचते हैं कि क्या हैशमैप में पहले से ही कुंजी के रूप में संख्या मौजूद है। यदि ऐसा होता है, तो हम मूल्य बढ़ाते हैं; यदि ऐसा नहीं होता है, तो हम 1 के मान के साथ कुंजी डालते हैं।

कोड

आयात java.util.ArrayList; आयात java.util.Arrays; आयात java.util.HashMap; आयात java.util.List; पब्लिक क्लास काउंटनंबर्स { निजी HashMap getCount(सूची सूची) { // संख्याओं की संख्या संग्रहीत करने के लिए HashMap आरंभ करें HashMap मानचित्र = नया HashMap(); // शून्य सूची के मामले में NullPointerException से बचने के लिए यदि (सूची != शून्य) { // सूची में प्रत्येक संख्या को दोहराएँ (int num : list) के लिए { // यदि पहली घटना है, तो गिनती 1 के साथ संख्या जोड़ें यदि (!map.containsKey(num)) { मानचित्र.पुट(संख्या, 1); } अन्यथा {// यदि संख्या पहले से मौजूद है, तो उसकी संख्या 1 बढ़ा दें मानचित्र.पुट(संख्या, मानचित्र.प्राप्त(संख्या) 1); } } } वापसी मानचित्र; } सार्वजनिक स्थैतिक शून्य main (String [] args) { // तर्क के रूप में संग्रह के साथ ArrayList पैरामीटरयुक्त कंस्ट्रक्टर का उपयोग करना सूची संख्याएँ = नई ArrayList(Arrays.asList(1, 2, 3, 5, 2, 1)); काउंटनंबर्स संख्याएँ = नए काउंटनंबर्स(); System.out.println(nums.getCount(null)); // परिणाम -> {} System.out.println(nums.getCount(संख्या)); // परिणाम -> {1=2, 2=2, 3=1, 5=1} } }
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

public class CountNumbers {

    private HashMap getCount(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}
    }
}

स्पष्टीकरण

  1. यदि सूची शून्य है: हम पुनरावृत्ति से पहले यह जांच कर NullPointerException से बचते हैं कि सूची शून्य है या नहीं।
  2. सूची पर पुनरावृत्ति: प्रत्येक संख्या के लिए, यदि वह पहले से ही हैशमैप में मौजूद है, तो हम उसका मूल्य बढ़ाते हैं। अन्यथा, हम इसे 1 के मान के साथ सम्मिलित करते हैं।

समय और स्थान जटिलता

  • समय जटिलता:

    • O(n) - हम सूची को एक बार पार करते हैं, जहां n तत्वों की संख्या है।
    • प्रत्येक हैशमैप ऑपरेशन (पुट और प्राप्त) औसतन
    • O(1) लेता है, जिससे समग्र समय जटिलता O(n) हो जाती है।
  • अंतरिक्ष जटिलता: O(n) - सबसे खराब स्थिति में, सभी नंबर अद्वितीय होते हैं और हैशमैप में संग्रहीत होते हैं।


समाधान 2: getOrDefault() विधि का उपयोग करके अनुकूलित दृष्टिकोण

Java HashMap क्लास getOrDefault() विधि के साथ इस समस्या को संभालने के लिए एक

स्वच्छ और अधिक संक्षिप्त तरीका प्रदान करता है। यदि मानचित्र में कुंजी नहीं मिलती है तो यह डिफ़ॉल्ट मान लौटाकर if-else तर्क की आवश्यकता को समाप्त कर देता है।

विधि परिभाषा

V getOrDefault(ऑब्जेक्ट कुंजी, V defaultValue)
{1=2, 2=2, 3=1, 5=1}
  • पैरामीटर:

      कुंजी: वह कुंजी जिसका संबद्ध मान लौटाया जाना है।
    • defaultValue: यदि मानचित्र में कुंजी के लिए कोई मैपिंग नहीं है तो लौटाया जाने वाला मान।
  • रिटर्न: वह मान जिस पर निर्दिष्ट कुंजी मैप की जाती है, या यदि मानचित्र में कुंजी के लिए कोई मैपिंग नहीं है तो डिफ़ॉल्ट मान।

अधिक जानकारी के लिए, आप HashMap के लिए आधिकारिक Javadoc देख सकते हैं।

कोड

आयात java.util.ArrayList; आयात java.util.Arrays; आयात java.util.HashMap; आयात java.util.List; पब्लिक क्लास काउंटनंबर्स { निजी HashMap getCount(सूची सूची) { // संख्याओं की संख्या संग्रहीत करने के लिए HashMap आरंभ करें HashMap मानचित्र = नया HashMap(); // शून्य सूची के मामले में NullPointerException से बचने के लिए यदि (सूची != शून्य) { // सूची में प्रत्येक संख्या को दोहराएँ (int num : list) के लिए { // getOrDefault() का उपयोग करके क्लीनर समाधान मानचित्र.पुट(संख्या, मानचित्र.getOrDefault(संख्या, 0) 1); } } वापसी मानचित्र; } सार्वजनिक स्थैतिक शून्य main (String [] args) { // तर्क के रूप में संग्रह के साथ ArrayList पैरामीटरयुक्त कंस्ट्रक्टर का उपयोग करना सूची संख्याएँ = नई ArrayList(Arrays.asList(1, 2, 3, 5, 2, 1)); काउंटनंबर्स संख्याएँ = नए काउंटनंबर्स(); System.out.println(nums.getCount(null)); // परिणाम -> {} System.out.println(nums.getCount(संख्या)); // परिणाम -> {1=2, 2=2, 3=1, 5=1} } }
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

public class CountNumbers {

    private HashMap getCount(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}
    }
}

स्पष्टीकरण

  1. getOrDefault() का उपयोग करना: यदि कुंजी मौजूद है तो यह विधि कुंजी का मान लौटाती है। यदि नहीं, तो यह प्रदान किया गया डिफ़ॉल्ट मान लौटाता है (इस मामले में, 0)।
  2. सम्मिलित करना और बढ़ाना: कोड सीधे डिफ़ॉल्ट मान में 1 जोड़ता है, जिससे यदि-अन्यथा तर्क की आवश्यकता समाप्त हो जाती है।

getOrDefault() के लाभ

  • क्लीनर कोड: if-else की आवश्यकता को हटाकर बॉयलरप्लेट को कम करता है।
  • समान जटिलता: O(n) दोनों के लिए समय और स्थान

दोनों दृष्टिकोणों की तुलना

यदि-अन्यथा तर्क के साथ थोड़ा क्रियात्मकस्वच्छ और अधिक संक्षिप्तवही (O(n))वही (O(n))सभी जावा संस्करणों के लिए काम करता हैजावा 8 या उच्चतर की आवश्यकता है
पहलू पारंपरिक दृष्टिकोण getOrDefault() का उपयोग करना
कोड पठनीयता
प्रदर्शन
उदाहरण

निष्कर्ष

दोनों समाधान समान परिणाम देंगे, लेकिन

getOrDefault() का उपयोग करने से कोड अधिक संक्षिप्त और पठनीय हो जाता है। यह प्रश्न एक आम साक्षात्कार पसंदीदा है क्योंकि यह हैशमैप्स, पुनरावृत्ति, और शून्य मानों को संभालने की आपकी समझ का मूल्यांकन करता है। यह आवृत्ति गिनती और डेटा एकत्रीकरण से जुड़ी समस्याओं से भी निकटता से संबंधित है।

यदि आपको यह पोस्ट उपयोगी लगी, तो कलेक्शंस फ्रेमवर्क एसेंशियल श्रृंखला में अन्य पोस्ट भी अवश्य देखें!


संबंधित पोस्ट

  • जावा बुनियादी बातें

  • साक्षात्कार अनिवार्यताओं की सारणी

  • जावा मेमोरी एसेंशियल्स

हैप्पी कोडिंग!

विज्ञप्ति वक्तव्य इस लेख को पुन: प्रस्तुत किया गया है: https://dev.to/arshisaxena26/hashmaps-in-action-tackling-a-common-comon-java-interview-challenge-2757?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] पर संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3