"यदि आपको लगता है कि हम सभी सूची इंटरफ़ेस के साथ काम कर चुके हैं, तो आप गलत हैं। हम अभी शुरुआत कर रहे हैं। मैं आपको LinkedList और ArrayList संग्रहों के बारे में बताता हूँ।"
"मैं ArrayList संग्रह से शुरू करूँगा।"
"यहां बताया गया है कि इस संग्रह का इनहेरिटेंस आरेख कैसा दिखता है:"
"इंटरफेस हरे हैं।"
"सार वर्ग बैंगनी हैं।"
"साधारण वर्ग लाल हैं।"
"ठोस रेखाएँ वंशानुक्रम का प्रतिनिधित्व करती हैं, और धराशायी रेखाएँ इंटरफ़ेस कार्यान्वयन का प्रतिनिधित्व करती हैं।"
"यह सबसे सरल संग्रह है। एक ArrayList के अंदर , तत्वों को एक साधारण सरणी में संग्रहित किया जाता है।"
"इस संग्रह का एक सरणी पर प्राथमिक लाभ इसकी विस्तार करने की क्षमता है, अर्थात आवश्यकतानुसार इसकी लंबाई बढ़ाने की क्षमता।"
"यदि सरणी अंतरिक्ष से बाहर हो जाती है, तो एक दूसरी बड़ी सरणी बनाई जाती है और पहली सरणी के सभी तत्वों की प्रतिलिपि बनाई जाती है। फिर दूसरी सरणी पहले की जगह लेती है, और पहले को छोड़ दिया जाता है (यह होगा) कचरा कलेक्टर द्वारा नष्ट कर दिया गया)।"
"सरणी कितनी बड़ी हो जाती है?"
"नई सरणी की लंबाई की गणना (3*n)/2+1 के रूप में की जाती है, जहां n पुरानी सरणी की लंबाई है। दूसरे शब्दों में, यदि पुरानी सरणी 100 तत्व लंबी थी, तो नई 300/2+1 होगी = 151।"
"एक ऐरेलिस्ट के बीच में एक तत्व जोड़ते समय, जहां नया तत्व डाला जाएगा, उसके दाईं ओर के सभी तत्वों को दाईं ओर 1 स्थिति की प्रतिलिपि बनाई जाती है, और फिर नया तत्व खाली सेल में जोड़ा जाता है।"
"किसी तत्व को बीच से हटाते समय, उस तत्व के दाईं ओर के सभी तत्वों को बाईं ओर 1 स्थिति में कॉपी किया जाता है।"
"क्या आप कह रहे हैं कि जब आप इसमें तत्व जोड़ते हैं तो ऐरेलिस्ट स्वयं को लंबा बनाता है, और जब आप तत्वों को हटाते हैं तो यह स्वयं को छोटा कर देता है?"
"नहीं, एक ArrayList के अंदर की सरणी कभी भी अपने आप को छोटा नहीं बनाती है; हालाँकि, आप एक ArrayList को trimToSize () विधि को कॉल करके अपने आंतरिक सरणी को सबसे छोटे संभव आकार में सिकोड़ने के लिए बाध्य कर सकते हैं । "
"और, ज़ाहिर है, मैं आपको लिंक्डलिस्ट के बारे में बताऊँगा।"
"यहाँ इसका वंशानुक्रम आरेख कैसा दिखता है:"
"इंटरफेस हरे हैं।"
"सार वर्ग बैंगनी हैं।"
"साधारण वर्ग लाल हैं।"
"ठोस रेखाएँ वंशानुक्रम का प्रतिनिधित्व करती हैं, और धराशायी रेखाएँ इंटरफ़ेस कार्यान्वयन का प्रतिनिधित्व करती हैं।"
"जैसा कि आप पहले से ही जानते हैं, लिंक्डलिस्ट तत्वों को एक लिंक्ड सूची के रूप में संग्रहीत करता है।"
"मैं हर समय सुनता हूं, लेकिन क्या आप मुझे बता सकते हैं कि यह क्या है?"
"बिल्कुल। "यह आसान है।"
"एक लिंक की गई सूची में ऐसे तत्व होते हैं जो a) डेटा संग्रहीत करते हैं और b) अगले और पिछले तत्वों के संदर्भों को संग्रहीत करते हैं।"
"इस प्रकार इस तरह के एक तत्व के लिए वर्ग दिखेगा यदि यह स्ट्रिंग्स को संग्रहीत करता है:"
उदाहरण | विवरण |
---|---|
|
डेटा फ़ील्ड तत्व के स्ट्रिंग मान को संग्रहीत करता है । अगला फ़ील्ड सूची में अगले तत्व का संदर्भ संग्रहीत करता है । पिछला फ़ील्ड सूची में पिछले तत्व का संदर्भ संग्रहीत करता है । |
"और अगर हम एक सामान्य प्रकार की घोषणा का उपयोग करते हैं, तो यह कुछ इस तरह दिखाई देगी:"
class LinkedListElement<T>
{
T data;
LinkedListElement<T> next;
LinkedListElement<T> previous;
}
"समझ में आता है।"
"इसे बेहतर ढंग से समझने के लिए, कोड लिखते हैं जहां हम 10 तत्वों को एक दोगुनी-लिंक्ड सूची में जोड़ते हैं:"
public static void main(String[] args)
{
LinkedListElement<Integer> tail; // The tail (very last element) of the list
for(int i = 0; i < 10; i++)
{
LinkedListElement<Integer> element = new LinkedListElement<Integer>();
element.data = i;
if (tail == null) // If the tail doesn't exist, then make our element the last element
{
tail = element;
}
else // if there is a tail, add the element
{
tail.next = element; // Set the next field on the tail element
element.previous = tail; // Add a reference to the tail to the new element
tail = element; // Make the new element the tail
}
}
}
"कल्पना करें कि हमारे पास सूची में 10 तत्व हैं। यहां एक तत्व को बीच में कैसे सम्मिलित किया जाए:"
"जो लिंक बदल गए हैं वे चमकीले लाल रंग में हाइलाइट किए गए हैं । वे अब नए तत्व की ओर इशारा करते हैं।"
"नए लिंक चमकीले बैंगनी हाइलाइट किए गए हैं । वे नए तत्व के अपने पड़ोसियों के लिंक हैं।"
"और अब कोड के रूप में:"
// This field stores the element that is the head of the list
LinkedListElement<Integer> head = …
// Get the 4th element (counting from zero)
LinkedListElement<Integer> element4 = head.next.next.next.next;
// Get the 5th element
LinkedListElement<Integer> element5 = element4.next;
// Create the new element that we will insert
LinkedListElement<Integer> newElement = new LinkedListElement<Integer>();
newElement.data = -18;
// Replace the references in the element on the left
newElement.previous = element4;
element4.next = newElement;
// Replace the references in the element on the right
newElement.next = element5;
element5.previous = newElement;
"धन्यवाद, ऐली। मैंने निश्चित रूप से सूचियों के बारे में बहुत कुछ नया सीखा है।"
GO TO FULL VERSION