जावा में किसी ऐरे में मान है या नहीं कैसे जाँचें: 5 घातक गलतियाँ

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावा में किसी ऐरे में मान है या नहीं कैसे जाँचें? शीर्ष गलतियों का विश्लेषण (और उनसे सीखें)

\n\n

एक स्थिति की कल्पना करें: आप Java में कोड लिख रहे हैं, आपके पास स्ट्रिंग्स (या संख्याओं) का एक ऐरे है, और आपको यह पता लगाना है—क्या उसमें कोई विशिष्ट मान मौजूद है? यह आसान लगता है, है ना? लेकिन यही प्रश्न (How do I determine whether an array contains a particular value in Java?) Stack Overflow पर आधा मिलियन से अधिक बार देखा गया। हजारों डेवलपर्स (शुरुआती से लेकर वरिष्ठ तक) एक ही गलतियों पर ठोकर खाते हैं।

\n\n

इस लेख में हम केवल तैयार उत्तर नहीं देंगे। हम 5 सबसे सामान्य गलतियों पर चर्चा करेंगे, जो एक सरल कार्य को सिरदर्द में बदल देती हैं। आप जानेंगे कि Arrays.asList().contains() क्यों काम नहीं कर सकता, Stream को प्रिमिटिव के साथ कैसे जोड़ें, और बाइनरी सर्च कब एक जाल बन जाती है। चलिए शुरू करते हैं!

\n\n

गलती #1: ऐरे के लिए equals() का उपयोग (शुरुआती लोगों की सबसे बड़ी आपदा)

\n\n

सबसे आम विफलता—सीधे ऐरे पर equals() या contains() को कॉल करने का प्रयास करना।

\n\n
// ❌ घातक गलती\nString[] fruits = {"apple", "banana", "orange"};\nSystem.out.println(fruits.equals("apple")); // false\nSystem.out.println(fruits.contains("apple")); // कम्पाइलेशन एरर!\n
\n\n

यह काम क्यों नहीं करता? Java में ऐरे एक ऑब्जेक्ट है, लेकिन इसमें contains() मेथड नहीं है। और equals() मेथड रेफरेंस (मेमोरी एड्रेस) की तुलना करता है, न कि सामग्री की। आपका ऐरे fruits हीप में एक ऑब्जेक्ट है, और स्ट्रिंग "apple" एक अलग ऑब्जेक्ट है। वे कभी बराबर नहीं होंगे।

\n\n

सही तरीका: लूप या java.util.Arrays की उपयोगिताओं का उपयोग करें।

\n\n
// ✅ सही: मैन्युअल ट्रैवर्सल\nString[] fruits = {"apple", "banana", "orange"};\nString target = "apple";\nboolean found = false;\nfor (String fruit : fruits) {\n    if (target.equals(fruit)) {\n        found = true;\n        break;\n    }\n}\nSystem.out.println(found); // true\n
\n\n

गलती #2: प्रिमिटिव ऐरे के लिए Arrays.asList().contains()

\n\n

अपनी कपटपूर्णता में शानदार समाधान। आप Stack Overflow पढ़ते हैं, Arrays.asList(yourArray).contains(value) की सलाह देखते हैं, और खुशी-खुशी इसे int[] ऐरे पर लागू करते हैं। और false प्राप्त करते हैं।

\n\n
// ❌ प्रिमिटिव के लिए काम नहीं करता\nint[] numbers = {1, 2, 3, 4, 5};\nList<Integer> list = Arrays.asList(numbers); // ध्यान दें!\nSystem.out.println(list.contains(3)); // false \n
\n\n

क्यों? प्रिमिटिव ऐरे int[] के लिए Arrays.asList() एक List<int[]> (एक तत्व वाली सूची—ऐरे) बनाता है, न कि List<Integer>। आप जाँच रहे हैं कि क्या सूची में ऐरे numbers में संख्या 3 है। बिल्कुल नहीं। सूची में केवल एक तत्व है—स्वयं ऐरे {1,2,3,4,5}।

\n\n

सही तरीका: प्रिमिटिव के लिए लूप, IntStream का उपयोग करें या ऑब्जेक्ट सूची में बदलें।

\n\n
// ✅ सही: IntStream के माध्यम से (Java 8+)\nint[] numbers = {1, 2, 3, 4, 5};\nboolean found = IntStream.of(numbers).anyMatch(n -> n == 3);\nSystem.out.println(found); // true\n\n// ✅ या लूप के माध्यम से\nboolean found2 = false;\nfor (int num : numbers) {\n    if (num == 3) {\n        found2 = true;\n        break;\n    }\n}\n
\n\n

गलती #3: बिना सॉर्टिंग के binarySearch() का भोला उपयोग

\n\n

Arrays.binarySearch() एक शक्तिशाली उपकरण है, लेकिन यह केवल सॉर्ट किए गए ऐरे पर काम करता है। यदि आप इसे बिना सॉर्ट किया ऐरे देते हैं, तो परिणाम अप्रत्याशित होगा (अक्सर—नकारात्मक संख्या, भले ही तत्व मौजूद हो)।

\n\n
// ❌ बिना सॉर्ट किए ऐरे पर बाइनरी सर्च\nString[] unsorted = {"banana", "apple", "orange"};\nint index = Arrays.binarySearch(unsorted, "apple");\nSystem.out.println(index); // हो सकता है                

ब्लॉग

पुस्तक अनुशंसाएँ