1. स्मृति में सारणियाँ

पिछले उदाहरणों में, दृष्टांत थोड़े गलत थे।

सरणियाँ बनाते समय (जैसे कि तार बनाते समय), मेमोरी के दो अलग-अलग ब्लॉक आवंटित किए जाते हैं: एक सरणी ( कंटेनर) को स्टोर करने के लिए और दूसरा ब्लॉक उस वेरिएबल के लिए जो अपना एड्रेस स्टोर करता है । नीचे दी गई तस्वीर इस स्पष्टीकरण का प्रतिनिधित्व करती है:

स्मृति में सरणी

तत्वों की सरणी के लिए आवंटित स्मृति 10 intऔर सरणी के पते कोint[] संग्रहीत करने वाले चर को हरे रंग में दिखाया गया है।int

तुलना के लिए, एक सामान्य intचर मान को संग्रहीत करने के लिए 199नीले रंग में दिखाया गया है।

यह स्मृति में तारों को संग्रहित करने की थोड़ी सी याद दिलाता है, क्या आपको नहीं लगता?

यह सही है, तार। और जब आप स्ट्रिंग्स के साथ काम करते हैं, तो आप एक दूसरे को ऐरे वेरिएबल्स असाइन कर सकते हैं:

कोड व्याख्या
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
10 intतत्वों की एक सरणी बनाएँ । इंडेक्स के साथ सेल को
वैल्यू असाइन करें । इंडेक्स के साथ सेल को वैल्यू असाइन करें । वेरिएबल में , वेरिएबल में स्टोर किए गए एड्रेस को सेव करें । अब और स्मृति में एक ही सरणी वस्तु को इंगित करें। अनुक्रमणिका के साथ सरणी ऑब्जेक्ट के सेल में , उन मानों का योग लिखें जो कक्षों में संग्रहीत हैं (जो मान संग्रहीत करता है ) और (जो मान संग्रहीत करता है )। 42
97
ba
ab
92479

सरणी वस्तु वहीं रहती है जहां वह थी, और aचर bसमान पते (संदर्भ) को उसी वस्तु पर संग्रहीत करते हैं। तस्वीर पर देखो:

स्मृति में सरणी 2

2. सरणियों के साथ काम करने के बारे में अधिक विवरण

आप बिल्कुल किसी भी प्रकार के तत्वों की एक सरणी बना सकते हैं। ऐसा करने के लिए, केवल प्रकार के नाम के बाद वर्ग कोष्ठक लिखें। सामान्य तौर पर, एक सरणी बनाना इस तरह दिखता है:

type[] name = new type[number];

जहां प्रकार उन तत्वों का प्रकार है जिन्हें हम सरणी में संग्रहीत करेंगे। नाम उस चर का नाम है जिसका उपयोग हम सरणी को संदर्भित करने के लिए करेंगे, और संख्या सरणी में कोशिकाओं की संख्या है।

उपरोक्त उदाहरण एक सरणी चर और सरणी वस्तु बनाने के लिए विहित रूप है। वास्तव में, ये दो अलग-अलग संस्थाएँ हैं।

आप किसी सरणी ऑब्जेक्ट से अलग से एक सरणी चर बना सकते हैं:

type[] name;
name = new type[number];

और एक और बात जो महत्वहीन नहीं है:

आप इंडेक्स सरणी और सरणी तत्वों की संख्या के रूप में चर या यहां तक ​​कि संपूर्ण अभिव्यक्तियों का उपयोग कर सकते हैं ।

उदाहरण:

कोड व्याख्या
int n = 100;
int[] a = new int[n];
nतत्वों की एक सरणी बनाएँ
int n = 100;
int[] a = new int[n * 2 + 3];
203तत्वों के साथ एक सरणी बनाएँ
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
महत्वपूर्ण:
वैसे, आपको पता होना चाहिए कि यदि आप एक इंडेक्स का उपयोग करके एक सरणी सेल तक पहुंचने का प्रयास करते हैं जो सरणी के लिए मौजूद नहीं है (हमारे उदाहरण में, इसका मतलब है कि कोई भी पूर्णांक श्रेणी में नहीं है), तो प्रोग्राम एक के साथ क्रैश हो 0..99जाएगा ArrayIndexOfBoundException, जिसका अर्थ है कि सूचकांक सरणी की सीमा के बाहर था।

3. ऐरे की लंबाई

जैसा कि आपने पिछले उदाहरण में देखा था, आप अपने आप में एक सरणी चर बना सकते हैं और फिर बाद में इसे कोड में कहीं एक मान (एक सरणी वस्तु का संदर्भ) निर्दिष्ट कर सकते हैं। आप यह भी कर सकते हैं:

कोड व्याख्या
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
एक सरणी चर बनाएँ जिसका प्रकार है int[]
यदि aचर से कम है 10, तो तत्वों
की एक सरणी बनाएँ । अन्यथा तत्वों की एक सरणी बनाएँ10

20

और अब आप ऐसी सरणी के साथ और क्या कर सकते हैं? आप कैसे जानते हैं कि इसमें कितने तत्व हैं?

इसकी सहायता के लिए, सरणियों में एक विशेष गुण (चर) होता है जिसका नाम length. आप इस अभिव्यक्ति का उपयोग करके सरणी की लंबाई पा सकते हैं:

array.length;

यहाँ arrayसरणी चर का नाम है और lengthसरणी की संपत्ति का नाम है। संपत्ति का मूल्य lengthबदला नहीं जा सकता है: lengthसंपत्ति को अन्य चरों को सौंपा जा सकता है, लेकिन इसे कुछ भी नहीं सौंपा जा सकता है (यदि आप ऐसा करने का प्रयास करते हैं, तो प्रोग्राम केवल संकलित नहीं होगा)।

हम पिछले उदाहरण के साथ इस तरह जारी रख सकते हैं:

कोड व्याख्या
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
एक सरणी चर बनाएँ जिसका प्रकार है int[]
यदि aचर से कम है 10, तो तत्वों
की एक सरणी बनाएँ । अन्यथा तत्वों की एक सरणी बनाएं सरणी के सभी तत्वों पर लूप करें: लंबाई से10

20
0array.length - 1

4. जावा में सरणियों के बारे में तथ्यों का सारांश

सरणियों के बारे में हम जो जानते हैं, उसे फिर से दोहराते हैं:

तथ्य 1। एक सरणी में कई सेल होते हैं।

तथ्य 2. आप किसी विशिष्ट सेल को उसके नंबर (इंडेक्स) का उपयोग करके एक्सेस करते हैं।

तथ्य 3. सभी कोशिकाएँ एक ही प्रकार की होती हैं।

तथ्य 4। सभी कोशिकाओं का प्रारंभिक मान 0 है (यदि कोशिकाएँ संख्याओं को संग्रहीत करती हैं), null(यदि कोशिकाएँ वस्तुओं के संदर्भों को संग्रहीत करती हैं), या false(यदि कोशिकाएँ booleanमानों को संग्रहीत करती हैं)। आप इस अध्याय में डिफ़ॉल्ट मानों के बारे में अधिक जानेंगे

Fact 5. String[] list सिर्फ एक Variable की Declaration है। यह कंटेनर (सरणी वस्तु) ही नहीं बनाता है। वेरिएबल का उपयोग करने के लिए, आपको पहले एक ऐरे (कंटेनर) बनाना होगा और इसे वेरिएबल को असाइन करना होगा। नीचे उदाहरण देखें।

Fact 6. जब हम कोई ऐरे ऑब्जेक्ट (कंटेनर) बनाते हैं तो हमें यह बताना होता है कि यह कितना बड़ा है, यानी इसमें कितने सेल हैं। यह एक बयान के साथ किया जाता है जैसे: new TypeName[n];

तथ्य 7..length गुण का उपयोग करके किसी सरणी की लंबाई ज्ञात की जा सकती है ।

तथ्य 8. एक सरणी बनाने के बाद, आप इसके तत्वों के प्रकार या इसमें संग्रहीत तत्वों की संख्या को नहीं बदल सकते।

कोड व्याख्या
String s;
String[] list;
sहै null
list_null
list = new String[10];
int n = list.length;
चर listकिसी वस्तु के संदर्भ को संग्रहीत करता है: 10तत्वों से युक्त एक स्ट्रिंग सरणी।
nहै10
list = new String[0];

अब तत्वों listकी एक सरणी को संदर्भित करता है । 0सरणी मौजूद है, लेकिन यह किसी भी तत्व को स्टोर नहीं कर सकती है।

list = null;
System.out.println(list[1]);
एक अपवाद (प्रोग्राम एरर) फेंका जाएगा, यानी प्रोग्राम क्रैश हो जाएगा। listका संदर्भ रखता हैnull
list = new String[10];
System.out.println(list[10]);
एक सरणी-आउट-ऑफ-बाउंड अपवाद (प्रोग्राम त्रुटि) उत्पन्न होगा।
यदि a तत्वों/कोशिकाओं को listसंग्रहीत करता है 10, तो वैध सूचकांक हैं: 0 1 2 3 4 5 6 7 8 910तत्व।