1. कैसे ArrayListसंरचित है

ArrayListजावा वर्ग है जो आमतौर पर तत्वों को संग्रहित करने के लिए उपयोग किया जाता है। तो कैसे ArrayListकाम करता है और हर कोई इसे इतना पसंद क्यों करता है?

की संरचना ArrayListसरल और सरल है। प्रत्येक ArrayListवस्तु में दो क्षेत्र होते हैं:

  • तत्वों की एक सरणी
  • एक sizeचर, जो सूची में तत्वों की संख्या को संग्रहीत करता है

आंतरिक रूप से, एक ArrayListवस्तु में एक सबसे साधारण सरणी होती है! लेकिन वह सब नहीं है। एक आकार चर भी है, जो सूची की लंबाई को संग्रहीत करता है। इस तरह से ये कार्य करता है:

प्रारंभ में, सूची के अंदर सरणी की लंबाई 10. है और sizeचर 0 है।

यदि आप सूची में कोई तत्व जोड़ते हैं, तो यह सरणी के 0 वें सेल में संग्रहीत किया जाएगा, और size1 तक बढ़ जाएगा।

यदि आप एक और तत्व जोड़ते हैं, तो यह पहले सेल में जमा हो जाएगा, और sizeफिर से 1 से बढ़ कर दो के बराबर हो जाएगा।

यदि आप सरणी में कोई और स्थान नहीं होने पर कोई अन्य तत्व जोड़ते हैं, तो निम्न add()विधि में होता है:

  1. एक नई सरणी बनाई जाती है जो पिछले एक की लंबाई से डेढ़ गुना है
  2. पुराने ऐरे के सभी तत्वों को नए एरे में कॉपी किया जाता है।
  3. ऑब्जेक्ट में ArrayList, नई सरणी का संदर्भ पुराने के संदर्भ को बदल देता है
  4. पारित तत्व नई सरणी के 10वें सेल में सहेजा गया है।
  5. आकार चर 1 से बढ़ता है और अब 11 के बराबर होगा

सूची के बीच में एक तत्व जोड़ने (डालने) पर कुछ ऐसा ही होता है। मौजूदा तत्वों को 1 से दाईं ओर स्थानांतरित कर दिया जाता है, और पास किए गए तत्व को सरणी के नए मुक्त कक्ष में लिखा जाता है।

अब हम सूचियों से जुड़े सबसे बुनियादी परिदृश्यों पर विचार करेंगे:


2. एक तत्व को एक में जोड़नाArrayList

आइए एक नजर डालते हैं कि जब सूची में तत्व जोड़े जाते हैं तो सूची के अंदर क्या होता है। ArrayList ऑब्जेक्ट बनने के तुरंत बाद, हमारे पास स्मृति में ऐसा कुछ होता है:

एक ArrayList में एक तत्व जोड़ना

हमारे पास एक ArrayListवस्तु है जिसमें दो फ़ील्ड (दो चर) हैं: एक कंटेनर ( dataसरणी) और संग्रहीत तत्वों की संख्या ( size)। चर dataएक कंटेनर (सरणी) के संदर्भ को संग्रहीत करता है जो 10 तत्वों को संग्रहीत कर सकता है।

यदि हम संख्या 5 को सरणी में जोड़ने का निर्णय लेते हैं, तो हमें निम्न चित्र मिलता है:

एक ArrayList में एक तत्व जोड़ना 2

सरणी अब तत्व 5 को संग्रहीत करती है, और size == 1.

यदि कोई size()हमारी ArrayListवस्तु पर विधि को कॉल करता है, तो वापसी मूल्य सूची में संग्रहीत तत्वों की संख्या होगी: 1। सूची में तत्वों की संख्या सरणी की भंडारण क्षमता के समान नहीं है।

ArrayListवस्तु के बाहर न तो वर्तमान भंडारण क्षमता और न ही सरणी कभी भी पहुंच योग्य (दृश्यमान) होगी। ArrayListयह का आंतरिक डेटा है और हमेशा रहेगा ।

सूची में 7 और संख्याएँ जोड़ते हैं: 10, 20, 30, 40, 50, 60, 70।

अब मेमोरी इस तरह दिखेगी:

एक ArrayList में एक तत्व जोड़ना

यदि आप size()विधि को अभी कॉल करते हैं, तो यह संख्या 8 लौटाएगा, जो सूची में तत्वों की नई संख्या है। इस मान का आंतरिक सरणी के आकार से कोई लेना-देना नहीं है।

महत्वपूर्ण:

इस चित्र में एक अतिसरलीकरण है।

वर्ग ArrayListआदिम प्रकारों को संग्रहीत नहीं कर सकता है, इसलिए यह Integerप्रकार के बजाय प्रकार का उपयोग करता है int। कंटेनर सीधे {5, 10, 20, 30, 40, 50, 60, 70} मानों को संग्रहीत नहीं करता है, बल्कि Integerवस्तुओं के संदर्भ में है। कंटेनर स्टोर में सभी खाली सेल null



3. सूची की लंबाई बढ़ाना

आइए एक नज़र डालते हैं कि किसी सूची के अंदर क्या होता है जब उसके आंतरिक सरणी में कोई खाली कक्ष नहीं होता है।

मान लीजिए हमारे पास 10 तत्वों की एक सूची है:

किसी सूची की लंबाई बढ़ाना

हम इसमें 100 की संख्या जोड़ने का निर्णय लेते हैं । विधि में यही होता है add():

चरण 1 - एक नई सरणी बनाएँ:

सूची की लंबाई बढ़ाना 2

चरण 2 - सभी तत्वों को पुराने सरणी से नए में कॉपी करें:

सूची की लंबाई बढ़ाना 2

चरण 3 - पुराने सरणी को बदलें ( ArrayListऑब्जेक्ट के आंतरिक सरणी के संदर्भ को बदलें):

सूची की लंबाई बढ़ाना 3

चरण 4 - नई संख्या जोड़ें, जिसे पूरा करने के लिए हमने बहुत मेहनत की है:

सूची की लंबाई बढ़ाना 4