मॉड्यूल पाठ (2/2)
संग्रह और ArrayList
जावा में पारंपरिक सरणियों का एक निश्चित आकार होता है जो निर्माण के समय परिभाषित होता है। डेटा की सूचियों के साथ काम करने के लिए जिसका आकार गतिशील रूप से भिन्न हो सकता है, जावा जावा कलेक्शन फ्रेमवर्क प्रदान करता है। सबसे अधिक उपयोग किया जाने वाला वर्ग ArrayList है।
ArrayList क्लास और जेनरिक
ArrayList मेमोरी में एक आकार बदलने योग्य सरणी लागू करता है। ArrayList घोषित करने के लिए, हमें इसे कोण कोष्ठक < > में संलग्न करके इसमें शामिल तत्वों के प्रकार को निर्दिष्ट करना होगा। इस सुविधा को जेनरिक कहा जाता है।
ArrayList का उपयोग करने के लिए, हमें इसे फ़ाइल की शुरुआत में java.util.ArrayList से आयात करना होगा।
घोषणा और तात्कालिकता:
import java.util.ArrayList;
ArrayList<String> shoppingList = new ArrayList<>();मूल विधियाँ
ArrayList पर मूलभूत परिचालन यहां दिए गए हैं:
add(element): सूची के अंत में एक तत्व जोड़ता है।get(index): निर्दिष्ट सूचकांक (0-अनुक्रमित) पर तत्व लौटाता है।size(): सूची में वर्तमान में तत्वों की संख्या लौटाता है।remove(index): निर्दिष्ट सूचकांक पर तत्व को हटाता है।
shoppingList.add("Pane");
shoppingList.add("Latte");
System.out.println("Elementi: " + shoppingList.size()); // Prints 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Prints "Pane"एक सूची पर पुनरावृत्ति (प्रत्येक के लिए)
प्रत्येक लूप के लिए संग्रह के सभी तत्वों के माध्यम से पुनरावृत्त करने के लिए आदर्श संरचना है:
for (String item : shoppingList) {
System.out.println(item);
}ऐरे बनाम ऐरेलिस्ट: मेमोरी और प्रदर्शन
हालाँकि ArrayList एक स्थिर सरणी की तुलना में बहुत अधिक लचीला है, यह प्रदर्शन और मेमोरी ट्रेड-ऑफ़ के साथ आता है:
- स्टेटिक ऐरे: इसे मेमोरी के एक सन्निहित ब्लॉक में आवंटित किया जाता है, इसका एक निश्चित आकार होता है, और इंडेक्स के माध्यम से तत्वों तक पहुंच बेहद तेज होती है। यह आदिम प्रकारों को बिना ओवरहेड के सीधे संग्रहीत करता है।
- ArrayList: आंतरिक रूप से, यह एक सरणी का प्रबंधन करता है जिसका आकार बदल दिया जाता है (एक नई बड़ी सरणी बनाकर और पुराने तत्वों की प्रतिलिपि बनाकर) जब इसकी प्रारंभिक क्षमता (आमतौर पर 10) पार हो जाती है। इसके अलावा, यह केवल ऑब्जेक्ट संदर्भों को संग्रहीत करता है, प्रत्येक तत्व के लिए मेमोरी ओवरहेड का परिचय देता है।
ऑटोबॉक्सिंग और अनबॉक्सिंग
चूँकि ArrayList केवल वस्तुओं को पकड़ सकता है, जावा स्वचालित रूप से आदिम प्रकारों और उनके संबंधित रैपर वर्गों के बीच रूपांतरण करता है:
- ऑटोबॉक्सिंग: एक आदिम प्रकार से एक रैपर वर्ग में स्वचालित रूपांतरण। उदाहरण के लिए, जब आप
numbers.add(42)लिखते हैं, तो जावा स्वचालित रूप से42(int) कोInteger.valueOf(42)(पूर्णांक) में परिवर्तित कर देता है। - अनबॉक्सिंग: रैपर वर्ग से आदिम प्रकार में स्वचालित रूपांतरण। उदाहरण के लिए, जब आप
int num = numbers.get(0)निष्पादित करते हैं, तो जावा आंतरिक रूप सेIntegerकोintमें परिवर्तित कर देता है।
खुद कोशिश करना
ArrayList आयात करें, स्ट्रिंग नामित नामों की ArrayList घोषित करें। सूची में ऐलिस और बॉब जोड़ें, फिर आकार() विधि का उपयोग करके उसका आकार प्रिंट करें।
संकेत दिखाएँ
शीर्ष पर `import java.util.ArrayList;` शामिल करें। `ArrayList<String>names = new ArrayList<>();` के साथ सूची बनाएं, तत्व जोड़ें, और उसका आकार `names.size()` के साथ प्रिंट करें।
3 प्रयासों के बाद समाधान उपलब्ध है
पूर्णांक नामित संख्याओं की एक ArrayList घोषित करें, संख्या 42 जोड़ें, और get() का उपयोग करके इसे इंडेक्स 0 पर पुनर्प्राप्त करके प्रिंट करें।
संकेत दिखाएँ
`ArrayList<Integer> number = new ArrayList<>();` (इंटेगर रैपर क्लास के साथ) का उपयोग करें और इसे `System.out.println(numbers.get(0));` के साथ प्रिंट करें।
3 प्रयासों के बाद समाधान उपलब्ध है
स्ट्रिंग नामित रंगों की एक ArrayList घोषित करें। सूची में लाल, हरा और नीला रंग जोड़ें। अंत में, सूची के माध्यम से पुनरावृति करने और प्रत्येक रंग को स्क्रीन पर प्रिंट करने के लिए प्रत्येक लूप का उपयोग करें।
संकेत दिखाएँ
सूची को `ArrayList<String> color = new ArrayList<>();` के साथ घोषित करें, तीन रंग जोड़ें, और `System.out.println(c);` का उपयोग करके उन्हें प्रिंट करने के लिए एक लूप `for (String c :colors)` का उपयोग करें।
3 प्रयासों के बाद समाधान उपलब्ध है