1. Arraysवर्ग

जैसा कि हमने पहले उल्लेख किया है, सरणियाँ बहुत उपयोगी हैं और अक्सर प्रोग्रामिंग में उपयोग की जाती हैं।

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

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

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


2.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?]"


3.Arrays.deepToString()

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

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

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

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

इसके लिए, Arraysवर्ग की एक और विशेष विधि है - deepToString(). इसे कॉल करना ऐसा दिखता है:

String str = Arrays.deepToString(name);

इस पद्धति को सरणियों को पारित किया जा सकता है जो द्वि-आयामी, एक-आयामी, त्रि-आयामी या सामान्य रूप से, किसी भी आयाम में हैं, और यह हमेशा सरणी के तत्वों को प्रदर्शित करेगा।
नोट: विधि Arrays.deepToString()आदिम के एक आयामी सरणियों के साथ काम नहीं करती है (उदाहरण के लिए, int[])।

उदाहरण:

Integer[] 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]], [[]]]"


4.Arrays.equals()

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

तार की तुलना करने के लिए, हमारे पास equalsऔर equalsIgnoreCaseविधियाँ हैं, लेकिन सरणियों में क्या विधियाँ हैं?

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

उदाहरण:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
boolean b = 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(सरणी की सामग्री अलग हैं)

5.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(सामग्री बराबर हैं)