"अमीगो, मुझे आशा है कि अब तक आप समझ गए होंगे कि प्रोग्रामिंग में सरणियाँ कितनी उपयोगी हैं?"

"निश्चित रूप से, ऋषि! मैंने पहले ही एक से अधिक कार्य हल कर लिए हैं।"

"क्या आपके कार्यों में दोहराए जाने वाले कार्य थे? जिस प्रकार आपने बार-बार किया है।"

"अगर मैं आपको सही ढंग से समझ पाया, तो आपका मतलब विभिन्न कार्यों में समान क्रियाओं से है? उदाहरण के लिए, हर जगह एक सरणी की सामग्री को प्रदर्शित करने के लिए एक लूप का उपयोग करना - मैं ऐसा करने से बहुत थक गया हूँ!"

"हाँ, मेरा यही मतलब है। जावा के रचनाकारों ने देखा कि जावा प्रोग्रामर अक्सर सरणियों के साथ काम करते समय एक ही कोड लिखते हैं। उदाहरण के लिए, किसी सरणी के भाग को किसी अन्य सरणी में कॉपी करने के लिए कोड, या किसी सरणी के प्रत्येक सेल को उसी के साथ भरने के लिए कोड मूल्य।या आपका उदाहरण: स्क्रीन पर एक पठनीय रूप में एक सरणी की सामग्री प्रदर्शित करने के लिए कोड।

"और असली प्रोग्रामर का एक बहुत ही महत्वपूर्ण नियम है: अपने आप को दोहराना नहीं है। आप सहमत होंगे कि फालतू काम करना गलत है - आपको इसके लिए भुगतान नहीं मिलेगा। प्रभावी काम का अच्छा भुगतान है, मेरा विश्वास करो। संयोग से, एक नौसिखिया बड़ी मात्रा में दोहराए जाने वाले कोड द्वारा कोड को तुरंत पहचाना जा सकता है।

"जावा के रचनाकारों ने इस पर विचार किया, और विशेष Arraysवर्ग (इसका पूरा नाम है java.util.Arrays) बनाया, इसमें सबसे लोकप्रिय सरणी-संबंधित क्रियाएं डालीं।"

"हम्म... बहुत दिलचस्प है। तो इसमें वास्तव में क्या है?

"इसमें हर अवसर के लिए बहुत सारे तरीके हैं, लेकिन पहले हम उनमें से सिर्फ 10 पर विचार करेंगे - सबसे सरल और अक्सर इस्तेमाल किया जाने वाला।

Arrays.toString()

"पहला तरीका हम देखेंगे Arrays.toString()। लेकिन पहले, थोड़ी पृष्ठभूमि।

"जावा में प्रत्येक सरणी में एक toString()विधि है, जो 'सरणी का शाब्दिक प्रतिनिधित्व' लौटाती है। आप निम्नलिखित कथन का उपयोग करके किसी सरणी का पाठ्य प्रतिनिधित्व प्राप्त कर सकते हैं:

String str = name.toString();

name" सरणी चर का नाम कहां है, और strचर का नाम है जो सरणी के स्ट्रिंग प्रतिनिधित्व को संग्रहीत करेगा। अमीगो, क्या आपने विधि का उपयोग करके स्क्रीन पर सरणी प्रिंट करने का प्रयास किया है?System.out.println(name)

मैं कबूल करता हूं, ऐसा हुआ था। मैंने कुछ बकवास देखा। मैंने तय किया कि नुकसान से दूर रहें और लूप का उपयोग जारी रखें।

"सबसे अधिक संभावना है कि आपने कुछ ऐसा देखा:

I@37afeb11

"पहले अक्षर का Iमतलब है कि यह एक intसरणी है, और उसके बाद के प्रतीक@ स्मृति में किसी एक वस्तु का पता हैं। आप इसे स्मृति में सरणी के पते के रूप में सोच सकते हैं। एक ओर, यह वास्तव में संग्रहीत जानकारी है सरणी चर, लेकिन दूसरी तरफ, आप कुछ अलग होने की उम्मीद करते हैं, है ना?"

"बिल्कुल सही! मैं सरणी में मूल्यों को देखने की योजना बना रहा था। यह आखिरी चीज थी जिसकी मुझे उम्मीद थी।"

"और यही कारण है कि वे विधि के साथ आए Arrays.toString()- एक सरणी के मान प्रदर्शित करने के लिए। हम इसे इस तरह कहते हैं:

String str = Arrays.toString(name);

उदाहरण:

int[] array = {1, 2, 3};
String str = Arrays.toString(array);
चर strमें स्ट्रिंग होगी"[1, 2, 3]"
int[] array = {};
String str = Arrays.toString(array);
चर strमें स्ट्रिंग होगी"[]"
String[] array = {"Hi", "How's", "life?"};
String str = Arrays.toString(array);
चर strमें स्ट्रिंग होगी"[Hi, How's, life?]"

Arrays.deepToString()

"हालांकि, toString()द्वि-आयामी सरणी की बात करते समय विधि पर्याप्त नहीं है। दूसरे शब्दों में, यदि आप कॉल करने का प्रयास करते हैं Arrays.toString(), तो आप कुछ परिचित देखेंगे:

[I@37afeb11, I@37afeb21, I@37afeb31]

"यह सब इसलिए है क्योंकि द्वि-आयामी सरणी स्टोर की कोशिकाएं एक-आयामी सरणी के संदर्भ में हैं। और एक-आयामी सरणी को स्ट्रिंग में कैसे परिवर्तित किया जाता है? ठीक उसी तरह जैसा आप ऊपर देखते हैं।

"फिर क्या करें? हम द्वि-आयामी सरणी को सही तरीके से कैसे प्रदर्शित करते हैं?"

"जावा के रचनाकारों ने भी इसका अनुमान लगाया था। इसके लिए, Arraysवर्ग के पास एक और विशेष तरीका है - deepToString()इसे कॉल करना इस तरह दिखता है:

String str = Arrays.deepToString(name);

"इस विधि को सरणी पारित किया जा सकता है जो द्वि-आयामी, एक-आयामी, त्रि-आयामी या सामान्य रूप से, किसी भी आयाम में होता है, और यह हमेशा सरणी के तत्वों को प्रदर्शित करेगा।

उदाहरण:

int[] array = {1, 2, 3};
String str = Arrays.deepToString(array);
चर strमें स्ट्रिंग होगी"[1, 2, 3]"
int[][] array = { {1, 1}, {2, 2}, {3, 3} };
String str = Arrays.deepToString(array);
चर strमें स्ट्रिंग होगी"[[1, 1], [2, 2], [3, 3]]"
int[][][] array = { {{1, 2, 3}, {1}}, {{}} };
String str = Arrays.deepToString(array);
चर strमें स्ट्रिंग होगी"[[[1, 2, 3], [1]], [[]]]"

Arrays.equals()

"हमने यह पता लगाया कि स्क्रीन पर सरणियों को कैसे प्रदर्शित किया जाए। सरणियों की तुलना करने के बारे में क्या? क्या आपको याद है कि स्ट्रिंग्स की तुलना करने के लिए हम किन तरीकों का उपयोग कर सकते हैं?"

"मैं आमतौर पर equalsविधि का उपयोग करता हूं!

"हां, equalsऔर भी equalsIgnoreCase(जो अपरकेस और लोअरकेस के संबंध में तारों की तुलना करता है)।

"अच्छी खबर: आप equalsसरणी के लिए विधि का भी उपयोग कर सकते हैं। बुरी खबर: यह सरणी की सामग्री की तुलना नहीं करती है। equalsसरणी की विधि ऑपरेटर के समान ही काम करती है ==- यह संदर्भों की तुलना करती है।

उदाहरण:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1 == x2;
false(संदर्भ बराबर नहीं हैं)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
equalsकी विधि केवल arraysदो सरणियों के संदर्भों की तुलना करती है।

false(संदर्भ बराबर नहीं हैं)

"तो हम क्या करें? हम उनकी सामग्री के आधार पर सरणियों की तुलना कैसे करते हैं?"

"फिर से Arraysवर्ग हमारे बचाव में आता है। अधिक विशेष रूप से, इसकी Arrays.equals()विधि। हम इसे इस तरह कहते हैं:

Arrays.equals(name1, name2)

true" यदि सरणियाँ समान लंबाई की हैं और उनके तत्व समान हैं, तो यह विधि वापस आ जाती है । अन्यथा, यह वापस आ जाती है false

उदाहरण:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
equalsकी विधि केवल arraysदो सरणियों के संदर्भों की तुलना करती है।

false(संदर्भ बराबर नहीं हैं)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
Arrays.equals(x1, x2);


true(सामग्री बराबर हैं)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3, 4};
Arrays.equals(x1, x2);


false(सरणी की सामग्री अलग हैं)

Arrays.deepEquals()

"और, जैसा कि आप शायद पहले ही अनुमान लगा चुके हैं, Arrays.equalsविधि द्वि-आयामी सरणियों के लिए सही ढंग से काम नहीं करेगी: यह द्वि-आयामी सरणियों को एक-आयामी सरणी की तरह व्यवहार करती है, जिनके तत्व एक-आयामी सरणियों के पते हैं।

"इस प्रकार, बहुआयामी सरणियों ( ) की सही तुलना करने के लिए n = 1, 2, 3,... , वे विधि के साथ आए Arrays.deepEquals()। इसे कॉल करना इस तरह दिखता है:

Arrays.deepEquals(name1, name2)

true" यदि सरणियाँ समान लंबाई की हैं और उनके तत्व समान हैं, तो यह विधि वापस आ जाती है । अन्यथा, यह वापस आ जाती हैfalse. यदि सरणी के अंदर के तत्व भी सरणियाँ हैं, तो Arrays.deepEquals()उनकी तुलना करने के लिए विधि का उपयोग किया जाता है, और इसी तरह।

उदाहरण:

int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

x1.equals(x2);
equalsकी विधि केवल arrays दो सरणियों के संदर्भों की तुलना करती है।

false(संदर्भ बराबर नहीं हैं)
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

Arrays.equals(x1, x2);
विधि Arrays.equalsतुलना और संदर्भों को संग्रहीत करने वाले एक-आयामी सरणियों के रूप में करेगी। उनमें अलग-अलग संदर्भ हैं। (सरणियों की सामग्री बराबर नहीं हैं) x1x2
false
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

Arrays.deepEquals(x1, x2);



true(सामग्री बराबर हैं)

"धन्यवाद, ऋषि! यह पाठ वही है जो मुझे अपने जीवन को भविष्य में आसान और खुशहाल बनाने के लिए चाहिए था। अब मैं Arrays वर्ग के तरीकों का उपयोग करूँगा और अपने कार्यक्रमों को और भी तेज़ी से लिखूँगा।

"मैं इसी पर भरोसा कर रहा था, हा-हा। लेकिन Arrays वर्ग में ये सभी दिलचस्प तरीके नहीं हैं। मैं आपको अगली बार दूसरों के बारे में बताऊंगा।"