NoteTube

Java List Interface Deep Dive | ArrayList, LinkedList, Vector, Stack | Java Full Course #32
44:38

Java List Interface Deep Dive | ArrayList, LinkedList, Vector, Stack | Java Full Course #32

Coder Army

6 chapters5 takeaways14 key terms5 questions

Overview

यह वीडियो जावा में लिस्ट इंटरफ़ेस और इसकी विभिन्न कार्यान्वयनों (implementations) जैसे ArrayList, LinkedList, Vector और Stack पर एक विस्तृत नज़र डालता है। यह लिस्ट इंटरफ़ेस की मुख्य विशेषताओं, जैसे कि इंसर्शन ऑर्डर बनाए रखना और इंडेक्स द्वारा तत्वों तक पहुंचना, की व्याख्या करता है। वीडियो प्रत्येक क्लास की आंतरिक कार्यप्रणाली, उनके फायदे और नुकसान, और उनके उपयोग के मामलों पर प्रकाश डालता है, जिसमें ArrayList के डायनामिक एरे, LinkedList की नोड-आधारित संरचना, और Vector और Stack की लेगेसी स्थिति शामिल है। यह Java 21 के बाद SequencedCollection जैसे नए इंटरफेस और Immutable List बनाने के लिए `List.of()` जैसे तरीकों पर भी चर्चा करता है।

How was this?

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 इंटरफ़ेस Collections Framework में कहाँ फिट बैठता है और यह अन्य डेटा संरचनाओं से कैसे भिन्न है, ताकि आप अपनी आवश्यकताओं के लिए सही डेटा संरचना चुन सकें।
Iterable -> Collection -> (Set, Queue, List) और Java 21+ के बाद Collection -> SequencedCollection -> List।
  • List इंटरफ़ेस इंसर्शन ऑर्डर को बनाए रखता है; तत्व उसी क्रम में संग्रहीत होते हैं जिस क्रम में उन्हें जोड़ा जाता है।
  • List के तत्वों को उनके इंडेक्स (स्थिति) का उपयोग करके एक्सेस किया जा सकता है, जो एरे की तरह ही होता है।
  • भले ही LinkedList में आंतरिक रूप से इंडेक्स न हों, यह इंडेक्स द्वारा तत्वों तक पहुँचने की सुविधा को अनुकरण (mimic) करता है, हालांकि यह धीमा हो सकता है।
  • List इंटरफ़ेस के मुख्य मेथड्स में `get(index)`, `set(index, element)`, `add(index, element)`, `remove(index)` और `List.of()` शामिल हैं।
ये विशेषताएँ List को उन परिदृश्यों के लिए उपयुक्त बनाती हैं जहाँ तत्वों का क्रम महत्वपूर्ण होता है और आपको इंडेक्स का उपयोग करके तत्वों तक पहुँचने या उन्हें संशोधित करने की आवश्यकता होती है।
एक लिस्ट `[1, 2, 3]` में, `get(1)` आपको `2` देगा। `set(1, 5)` लिस्ट को `[1, 5, 3]` में बदल देगा। `add(1, 9)` लिस्ट को `[1, 9, 2, 3]` में बदल देगा।
  • SequencedCollection इंटरफ़ेस, जो Collection को एक्सटेंड करता है, पहले और अंतिम तत्वों तक पहुँचने और उन्हें संशोधित करने के लिए `addFirst()`, `addLast()`, `getFirst()`, `getLast()`, `removeFirst()`, `removeLast()` जैसे मेथड्स प्रदान करता है।
  • List इंटरफ़ेस `List.of()` का उपयोग करके अपरिवर्तनीय (immutable) लिस्ट बनाने की अनुमति देता है, जिसका अर्थ है कि आप उन्हें बनाने के बाद संशोधित नहीं कर सकते।
  • `List.copyOf()` मौजूदा कलेक्शन की एक अपरिवर्तनीय कॉपी बनाने के लिए एक और तरीका है।
ये नए मेथड्स और अपरिवर्तनीय लिस्ट बनाने की क्षमता कोड को अधिक सुरक्षित और कुशल बनाती है, खासकर मल्टी-थ्रेडेड वातावरण में।
`List.of(1, 2, 3)` एक अपरिवर्तनीय लिस्ट `[1, 2, 3]` बनाता है। इस लिस्ट में `add()` का प्रयास करने पर `UnsupportedOperationException` आएगा।
  • ArrayList आंतरिक रूप से एक डायनामिक एरे का उपयोग करता है, जो आवश्यकतानुसार आकार बदलता है।
  • जब एरे भर जाता है, तो ArrayList क्षमता को लगभग 1.5 गुना बढ़ाता है (oldCapacity + oldCapacity / 2), जिससे तत्वों को कॉपी करने की लागत आती है।
  • इंडेक्स द्वारा तत्वों को प्राप्त करना (`get`) और सेट करना (`set`) ArrayList में बहुत तेज़ (O(1) समय) होता है क्योंकि यह रैंडम एक्सेस प्रदान करता है।
  • इंडेक्स पर तत्वों को जोड़ना (`add`) या हटाना (`remove`) धीमा (O(n) समय) होता है क्योंकि इसमें तत्वों को शिफ्ट करने की आवश्यकता होती है।
ArrayList रैंडम एक्सेस के लिए उत्कृष्ट है, जो इसे पढ़ने के भारी संचालन वाले परिदृश्यों के लिए एक लोकप्रिय विकल्प बनाता है, लेकिन इंसर्शन और डिलीशन के लिए यह कम कुशल हो सकता है।
एक ArrayList में 100 तत्वों को जोड़ने के लिए, यदि एरे को बार-बार आकार बदलना पड़ता है, तो प्रत्येक आकार बदलने की प्रक्रिया में मौजूदा तत्वों को नए, बड़े एरे में कॉपी करना शामिल होगा।
  • LinkedList आंतरिक रूप से एक Doubly Linked List का उपयोग करता है, जहाँ प्रत्येक नोड में डेटा के साथ-साथ अगले और पिछले नोड के संदर्भ (references) होते हैं।
  • LinkedList ऑप्टिमाइज़ेशन के लिए फर्स्ट और लास्ट तत्वों के संदर्भों को बनाए रखता है।
  • LinkedList इंडेक्स द्वारा तत्वों तक पहुँचने के लिए यह निर्धारित करता है कि शुरुआत से या अंत से ट्रैवर्स करना अधिक कुशल है।
  • LinkedList में तत्वों को जोड़ना (`add`) या हटाना (`remove`) पॉइंटर्स को अपडेट करके किया जाता है, जिसमें तत्वों को शिफ्ट करने की आवश्यकता नहीं होती है, लेकिन उस स्थिति तक पहुँचने में O(n) समय लग सकता है।
LinkedList इंसर्शन और डिलीशन के लिए कुशल है (पॉइंटर अपडेट के कारण), लेकिन इंडेक्स द्वारा तत्वों तक पहुँचने के लिए कम कुशल है, जो इसे उन परिदृश्यों के लिए उपयुक्त बनाता है जहाँ बार-बार इंसर्शन/डिलीशन होता है और रैंडम एक्सेस की आवश्यकता कम होती है।
एक LinkedList में एक तत्व को जोड़ने के लिए, LinkedList को उस तत्व को जोड़ने के लिए सही नोड तक ट्रैवर्स करना होगा और फिर अगले और पिछले नोड्स के पॉइंटर्स को अपडेट करना होगा।
  • Vector और Stack Java की पुरानी (legacy) क्लासेस हैं जो अब कम उपयोग की जाती हैं।
  • Vector एक डायनामिक एरे का उपयोग करता है और यह थ्रेड-सेफ है, जिसका अर्थ है कि यह मल्टी-थ्रेडेड वातावरण में उपयोग के लिए सुरक्षित है, लेकिन इसमें अतिरिक्त ओवरहेड होता है।
  • Stack क्लास Vector को एक्सटेंड करती है और स्टैक डेटा संरचना (LIFO - Last In, First Out) को लागू करती है।
  • आधुनिक Java में, थ्रेड-सेफ संचालन के लिए `Concurrent Collections` और स्टैक कार्यान्वयन के लिए `ArrayDeque` का उपयोग करने की सलाह दी जाती है।
यह समझना महत्वपूर्ण है कि Vector और Stack लेगेसी क्यों हैं और आधुनिक Java में उनके विकल्प क्यों बेहतर हैं, ताकि आप प्रदर्शन और सुरक्षा के लिए सही डेटा संरचनाओं का चयन कर सकें।
Vector थ्रेड-सेफ होने के कारण, यदि कई थ्रेड एक ही Vector को एक साथ संशोधित करने का प्रयास करते हैं, तो डेटा भ्रष्टाचार (data corruption) को रोका जाता है, लेकिन यह इसे ArrayList की तुलना में धीमा बनाता है।

Key takeaways

  1. 1List इंटरफ़ेस क्रमबद्ध संग्रह (ordered collections) को परिभाषित करता है जहाँ तत्वों को इंडेक्स द्वारा एक्सेस किया जा सकता है और डुप्लिकेट की अनुमति है।
  2. 2ArrayList रैंडम एक्सेस के लिए सबसे अच्छा है (O(1)), जबकि LinkedList इंसर्शन और डिलीशन के लिए बेहतर है (O(1) पॉइंटर अपडेट के साथ, लेकिन O(n) स्थिति तक पहुँचने के लिए)।
  3. 3Java 21+ में SequencedCollection इंटरफ़ेस पहले और अंतिम तत्वों के लिए अतिरिक्त मेथड्स प्रदान करता है, और `List.of()` अपरिवर्तनीय लिस्ट बनाने के लिए उपयोगी है।
  4. 4Vector और Stack लेगेसी क्लासेस हैं; आधुनिक Java में थ्रेड-सेफ संचालन के लिए Concurrent Collections और स्टैक के लिए ArrayDeque का उपयोग करें।
  5. 5किसी विशेष स्थिति में तत्वों को जोड़ना या हटाना (जैसे `add(index, element)`) ArrayList और LinkedList दोनों में धीमा हो सकता है क्योंकि इसमें या तो तत्वों को शिफ्ट करना पड़ता है या उस स्थिति तक ट्रैवर्स करना पड़ता है।

Key terms

List InterfaceArrayListLinkedListVectorStackSequencedCollectionImmutable ListDynamic ArrayDoubly Linked ListThread-safeLegacy ClassesRandom AccessInsertion OrderIndex

Test your understanding

  1. 1ArrayList और LinkedList के बीच मुख्य अंतर क्या हैं, खासकर प्रदर्शन के मामले में?
  2. 2आप Java में एक अपरिवर्तनीय (immutable) लिस्ट कैसे बना सकते हैं, और इसका क्या महत्व है?
  3. 3Vector और Stack को लेगेसी क्लासेस क्यों माना जाता है, और उनके आधुनिक विकल्प क्या हैं?
  4. 4List इंटरफ़ेस की कौन सी विशेषताएँ इसे उन परिदृश्यों के लिए उपयुक्त बनाती हैं जहाँ तत्वों का क्रम महत्वपूर्ण होता है?
  5. 5SequencedCollection इंटरफ़ेस List इंटरफ़ेस में क्या अतिरिक्त कार्यक्षमता जोड़ता है?

Turn any lecture into study material

Paste a YouTube URL, PDF, or article. Get flashcards, quizzes, summaries, and AI chat — in seconds.

No credit card required