1. कैसे ArrayList
संरचित है
ArrayList
जावा वर्ग है जो आमतौर पर तत्वों को संग्रहित करने के लिए उपयोग किया जाता है। तो कैसे ArrayList
काम करता है और हर कोई इसे इतना पसंद क्यों करता है?
की संरचना ArrayList
सरल और सरल है। प्रत्येक ArrayList
वस्तु में दो क्षेत्र होते हैं:
- तत्वों की एक सरणी
- एक
size
चर, जो सूची में तत्वों की संख्या को संग्रहीत करता है
आंतरिक रूप से, एक ArrayList
वस्तु में एक सबसे साधारण सरणी होती है! लेकिन वह सब नहीं है। एक आकार चर भी है, जो सूची की लंबाई को संग्रहीत करता है। इस तरह से ये कार्य करता है:
प्रारंभ में, सूची के अंदर सरणी की लंबाई 10. है और size
चर 0 है।
यदि आप सूची में कोई तत्व जोड़ते हैं, तो यह सरणी के 0 वें सेल में संग्रहीत किया जाएगा, और size
1 तक बढ़ जाएगा।
यदि आप एक और तत्व जोड़ते हैं, तो यह पहले सेल में जमा हो जाएगा, और size
फिर से 1 से बढ़ कर दो के बराबर हो जाएगा।
यदि आप सरणी में कोई और स्थान नहीं होने पर कोई अन्य तत्व जोड़ते हैं, तो निम्न add()
विधि में होता है:
- एक नई सरणी बनाई जाती है जो पिछले एक की लंबाई से डेढ़ गुना है
- पुराने ऐरे के सभी तत्वों को नए एरे में कॉपी किया जाता है।
- ऑब्जेक्ट में
ArrayList
, नई सरणी का संदर्भ पुराने के संदर्भ को बदल देता है । - पारित तत्व नई सरणी के 10वें सेल में सहेजा गया है।
- आकार चर 1 से बढ़ता है और अब 11 के बराबर होगा
सूची के बीच में एक तत्व जोड़ने (डालने) पर कुछ ऐसा ही होता है। मौजूदा तत्वों को 1 से दाईं ओर स्थानांतरित कर दिया जाता है, और पास किए गए तत्व को सरणी के नए मुक्त कक्ष में लिखा जाता है।
अब हम सूचियों से जुड़े सबसे बुनियादी परिदृश्यों पर विचार करेंगे:
2. एक तत्व को एक में जोड़नाArrayList
आइए एक नजर डालते हैं कि जब सूची में तत्व जोड़े जाते हैं तो सूची के अंदर क्या होता है। ArrayList ऑब्जेक्ट बनने के तुरंत बाद, हमारे पास स्मृति में ऐसा कुछ होता है:
हमारे पास एक ArrayList
वस्तु है जिसमें दो फ़ील्ड (दो चर) हैं: एक कंटेनर ( data
सरणी) और संग्रहीत तत्वों की संख्या ( size
)। चर data
एक कंटेनर (सरणी) के संदर्भ को संग्रहीत करता है जो 10 तत्वों को संग्रहीत कर सकता है।
यदि हम संख्या 5 को सरणी में जोड़ने का निर्णय लेते हैं, तो हमें निम्न चित्र मिलता है:
सरणी अब तत्व 5 को संग्रहीत करती है, और size == 1
.
यदि कोई size()
हमारी ArrayList
वस्तु पर विधि को कॉल करता है, तो वापसी मूल्य सूची में संग्रहीत तत्वों की संख्या होगी: 1। सूची में तत्वों की संख्या सरणी की भंडारण क्षमता के समान नहीं है।
ArrayList
वस्तु के बाहर न तो वर्तमान भंडारण क्षमता और न ही सरणी कभी भी पहुंच योग्य (दृश्यमान) होगी। ArrayList
यह का आंतरिक डेटा है और हमेशा रहेगा ।
सूची में 7 और संख्याएँ जोड़ते हैं: 10, 20, 30, 40, 50, 60, 70।
अब मेमोरी इस तरह दिखेगी:
यदि आप size()
विधि को अभी कॉल करते हैं, तो यह संख्या 8 लौटाएगा, जो सूची में तत्वों की नई संख्या है। इस मान का आंतरिक सरणी के आकार से कोई लेना-देना नहीं है।
इस चित्र में एक अतिसरलीकरण है।
वर्ग ArrayList
आदिम प्रकारों को संग्रहीत नहीं कर सकता है, इसलिए यह Integer
प्रकार के बजाय प्रकार का उपयोग करता है int
। कंटेनर सीधे {5, 10, 20, 30, 40, 50, 60, 70} मानों को संग्रहीत नहीं करता है, बल्कि Integer
वस्तुओं के संदर्भ में है। कंटेनर स्टोर में सभी खाली सेल null
।
3. सूची की लंबाई बढ़ाना
आइए एक नज़र डालते हैं कि किसी सूची के अंदर क्या होता है जब उसके आंतरिक सरणी में कोई खाली कक्ष नहीं होता है।
मान लीजिए हमारे पास 10 तत्वों की एक सूची है:
हम इसमें 100 की संख्या जोड़ने का निर्णय लेते हैं । विधि में यही होता है add()
:
चरण 1 - एक नई सरणी बनाएँ:
चरण 2 - सभी तत्वों को पुराने सरणी से नए में कॉपी करें:
चरण 3 - पुराने सरणी को बदलें ( ArrayList
ऑब्जेक्ट के आंतरिक सरणी के संदर्भ को बदलें):
चरण 4 - नई संख्या जोड़ें, जिसे पूरा करने के लिए हमने बहुत मेहनत की है:
GO TO FULL VERSION