
Java List Interface Deep Dive | ArrayList, LinkedList, Vector, Stack | Java Full Course #32
Coder Army
Overview
यह वीडियो जावा में लिस्ट इंटरफ़ेस और इसकी विभिन्न कार्यान्वयनों (implementations) जैसे ArrayList, LinkedList, Vector और Stack पर एक विस्तृत नज़र डालता है। यह लिस्ट इंटरफ़ेस की मुख्य विशेषताओं, जैसे कि इंसर्शन ऑर्डर बनाए रखना और इंडेक्स द्वारा तत्वों तक पहुंचना, की व्याख्या करता है। वीडियो प्रत्येक क्लास की आंतरिक कार्यप्रणाली, उनके फायदे और नुकसान, और उनके उपयोग के मामलों पर प्रकाश डालता है, जिसमें ArrayList के डायनामिक एरे, LinkedList की नोड-आधारित संरचना, और Vector और Stack की लेगेसी स्थिति शामिल है। यह Java 21 के बाद SequencedCollection जैसे नए इंटरफेस और Immutable List बनाने के लिए `List.of()` जैसे तरीकों पर भी चर्चा करता है।
Save this permanently with flashcards, quizzes, and AI chat
Chapters
- Java Collections Framework में, Iterable के नीचे Collection इंटरफ़ेस आता है, जो आगे Set, Queue और List में विभाजित होता है।
- List इंटरफ़ेस Collection इंटरफ़ेस को एक्सटेंड करता है और क्रमबद्ध (ordered) संग्रह (collection) को दर्शाता है जहाँ डुप्लिकेट तत्वों की अनुमति होती है।
- List इंटरफ़ेस को लागू करने वाली मुख्य कंक्रीट क्लासेस में ArrayList, LinkedList, Vector और Stack शामिल हैं।
- Java 21 के बाद, Collection और List के बीच SequencedCollection नामक एक नया इंटरफ़ेस पेश किया गया है।
- List इंटरफ़ेस इंसर्शन ऑर्डर को बनाए रखता है; तत्व उसी क्रम में संग्रहीत होते हैं जिस क्रम में उन्हें जोड़ा जाता है।
- List के तत्वों को उनके इंडेक्स (स्थिति) का उपयोग करके एक्सेस किया जा सकता है, जो एरे की तरह ही होता है।
- भले ही LinkedList में आंतरिक रूप से इंडेक्स न हों, यह इंडेक्स द्वारा तत्वों तक पहुँचने की सुविधा को अनुकरण (mimic) करता है, हालांकि यह धीमा हो सकता है।
- List इंटरफ़ेस के मुख्य मेथड्स में `get(index)`, `set(index, element)`, `add(index, element)`, `remove(index)` और `List.of()` शामिल हैं।
- SequencedCollection इंटरफ़ेस, जो Collection को एक्सटेंड करता है, पहले और अंतिम तत्वों तक पहुँचने और उन्हें संशोधित करने के लिए `addFirst()`, `addLast()`, `getFirst()`, `getLast()`, `removeFirst()`, `removeLast()` जैसे मेथड्स प्रदान करता है।
- List इंटरफ़ेस `List.of()` का उपयोग करके अपरिवर्तनीय (immutable) लिस्ट बनाने की अनुमति देता है, जिसका अर्थ है कि आप उन्हें बनाने के बाद संशोधित नहीं कर सकते।
- `List.copyOf()` मौजूदा कलेक्शन की एक अपरिवर्तनीय कॉपी बनाने के लिए एक और तरीका है।
- ArrayList आंतरिक रूप से एक डायनामिक एरे का उपयोग करता है, जो आवश्यकतानुसार आकार बदलता है।
- जब एरे भर जाता है, तो ArrayList क्षमता को लगभग 1.5 गुना बढ़ाता है (oldCapacity + oldCapacity / 2), जिससे तत्वों को कॉपी करने की लागत आती है।
- इंडेक्स द्वारा तत्वों को प्राप्त करना (`get`) और सेट करना (`set`) ArrayList में बहुत तेज़ (O(1) समय) होता है क्योंकि यह रैंडम एक्सेस प्रदान करता है।
- इंडेक्स पर तत्वों को जोड़ना (`add`) या हटाना (`remove`) धीमा (O(n) समय) होता है क्योंकि इसमें तत्वों को शिफ्ट करने की आवश्यकता होती है।
- LinkedList आंतरिक रूप से एक Doubly Linked List का उपयोग करता है, जहाँ प्रत्येक नोड में डेटा के साथ-साथ अगले और पिछले नोड के संदर्भ (references) होते हैं।
- LinkedList ऑप्टिमाइज़ेशन के लिए फर्स्ट और लास्ट तत्वों के संदर्भों को बनाए रखता है।
- LinkedList इंडेक्स द्वारा तत्वों तक पहुँचने के लिए यह निर्धारित करता है कि शुरुआत से या अंत से ट्रैवर्स करना अधिक कुशल है।
- LinkedList में तत्वों को जोड़ना (`add`) या हटाना (`remove`) पॉइंटर्स को अपडेट करके किया जाता है, जिसमें तत्वों को शिफ्ट करने की आवश्यकता नहीं होती है, लेकिन उस स्थिति तक पहुँचने में O(n) समय लग सकता है।
- Vector और Stack Java की पुरानी (legacy) क्लासेस हैं जो अब कम उपयोग की जाती हैं।
- Vector एक डायनामिक एरे का उपयोग करता है और यह थ्रेड-सेफ है, जिसका अर्थ है कि यह मल्टी-थ्रेडेड वातावरण में उपयोग के लिए सुरक्षित है, लेकिन इसमें अतिरिक्त ओवरहेड होता है।
- Stack क्लास Vector को एक्सटेंड करती है और स्टैक डेटा संरचना (LIFO - Last In, First Out) को लागू करती है।
- आधुनिक Java में, थ्रेड-सेफ संचालन के लिए `Concurrent Collections` और स्टैक कार्यान्वयन के लिए `ArrayDeque` का उपयोग करने की सलाह दी जाती है।
Key takeaways
- List इंटरफ़ेस क्रमबद्ध संग्रह (ordered collections) को परिभाषित करता है जहाँ तत्वों को इंडेक्स द्वारा एक्सेस किया जा सकता है और डुप्लिकेट की अनुमति है।
- ArrayList रैंडम एक्सेस के लिए सबसे अच्छा है (O(1)), जबकि LinkedList इंसर्शन और डिलीशन के लिए बेहतर है (O(1) पॉइंटर अपडेट के साथ, लेकिन O(n) स्थिति तक पहुँचने के लिए)।
- Java 21+ में SequencedCollection इंटरफ़ेस पहले और अंतिम तत्वों के लिए अतिरिक्त मेथड्स प्रदान करता है, और `List.of()` अपरिवर्तनीय लिस्ट बनाने के लिए उपयोगी है।
- Vector और Stack लेगेसी क्लासेस हैं; आधुनिक Java में थ्रेड-सेफ संचालन के लिए Concurrent Collections और स्टैक के लिए ArrayDeque का उपयोग करें।
- किसी विशेष स्थिति में तत्वों को जोड़ना या हटाना (जैसे `add(index, element)`) ArrayList और LinkedList दोनों में धीमा हो सकता है क्योंकि इसमें या तो तत्वों को शिफ्ट करना पड़ता है या उस स्थिति तक ट्रैवर्स करना पड़ता है।
Key terms
Test your understanding
- ArrayList और LinkedList के बीच मुख्य अंतर क्या हैं, खासकर प्रदर्शन के मामले में?
- आप Java में एक अपरिवर्तनीय (immutable) लिस्ट कैसे बना सकते हैं, और इसका क्या महत्व है?
- Vector और Stack को लेगेसी क्लासेस क्यों माना जाता है, और उनके आधुनिक विकल्प क्या हैं?
- List इंटरफ़ेस की कौन सी विशेषताएँ इसे उन परिदृश्यों के लिए उपयुक्त बनाती हैं जहाँ तत्वों का क्रम महत्वपूर्ण होता है?
- SequencedCollection इंटरफ़ेस List इंटरफ़ेस में क्या अतिरिक्त कार्यक्षमता जोड़ता है?