1.Arrays.fill()

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

int[] x = new int[100];
for (int i = 0; i < x.length; i++)
x[i] = 999;

या आप बस विधि को कॉल कर सकते हैं Arrays.fill(), जो बिल्कुल वही काम करता है: यह पास किए गए सरणी को पास किए गए मान से भरता है। यहाँ यह कैसा दिखता है:

Arrays.fill(name, value)

और उपरोक्त उदाहरण में कोड को थोड़ा और अधिक कॉम्पैक्ट और स्पष्ट बनाया जा सकता है:

int[] x = new int[100];
Arrays.fill(x, 999);

आप Arrays.fill()पूरे सरणी को भरने के लिए विधि का उपयोग नहीं कर सकते हैं, लेकिन इसका एक हिस्सा, कुछ मूल्य के साथ:

Arrays.fill(name, first, last, value)

जहां पहले और आखिरी में भरे जाने वाले पहले और आखिरी सेल के सूचकांक हैं।

जावा की पुरानी परंपरा के अनुसार, याद रखें कि अंतिम तत्व श्रेणी में शामिल नहीं है।

उदाहरण:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Arrays.fill(x, 3, 7, 999);


String str = Arrays.toString(x);


हम सेल x[3], x[4], x[5], और x[6]मान से भर रहे हैं 999। एक सरणी की कोशिकाओं को शून्य से शुरू किया जाता है!

चर strमें मान होता है:
"[1, 2, 3, 999, 999, 999, 999, 8, 9, 10]"

विधि Arrays.fill()केवल एक आयामी सरणियों के साथ काम करती है। यदि आप विधि में द्वि-आयामी सरणी पास करते हैं, तो इसे सभी आगामी परिणामों के साथ एक-आयामी माना जाएगा।



2.Arrays.copyOf()

जैसा कि आप पहले से ही जानते हैं, आप किसी सरणी के बनने के बाद उसका आकार नहीं बदल सकते।

लेकिन क्या होगा यदि आप वास्तव में चाहते हैं?

ठीक है, अगर आप वास्तव में चाहते हैं, तो आप कर सकते हैं!

  • वांछित लंबाई की एक नई सरणी बनाएँ
  • इसमें सभी तत्वों को पहली सरणी से कॉपी करें।

वैसे, यह वही है जो Arrays.copyOf()विधि करती है। इसे कॉल करने जैसा दिखता है:

Type[] name2 = Arrays.copyOf(name, length);

यह विधि मौजूदा सरणी को नहीं बदलती है , बल्कि इसके बजाय एक नई सरणी बनाती है और पुराने सरणी के तत्वों को इसमें कॉपी करती है।

यदि तत्व फिट नहीं होते हैं ( लंबाई मौजूदा सरणी की लंबाई से कम है ), तो अतिरिक्त मानों को अनदेखा कर दिया जाता है।

यदि नई सरणी की लंबाई पुरानी सरणी की लंबाई से अधिक है, तो कक्ष शून्य से भर जाते हैं।

उदाहरण:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int[] x2 = Arrays.copyOf(x, 5);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOf(x, 15);
String str3 = Arrays.toString(x3);


चर str2में मान होता है:
"[1, 2, 3, 4, 5]"

चर str3में मान होता है:
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0]"

3.Arrays.copyOfRange()

और क्या होगा यदि आप लंबाई 10 की सरणी से लंबाई 5 की सरणी प्राप्त करना चाहते हैं, लेकिन आपको पहले 5 के बजाय अंतिम 5 तत्वों को शामिल करने की आवश्यकता है?

इस मामले में, कक्षा का एक और तरीका Arraysकाम आएगा - Arrays.copyOfRange(). जब हम इसे कहते हैं तो यह ऐसा दिखता है:

Type[] name2 = Arrays.copyOfRange(name, first, last);

यह विधि एक नई सरणी भी बनाती है, लेकिन इसे मूल सरणी में मनमाने स्थान से तत्वों से भर देती है। जहां पहले और आखिरी पहले और आखिरी तत्वों के सूचकांक हैं जिन्हें नए सरणी में रखा जाना चाहिए।

जावा की पुरानी परंपरा के अनुसार, याद रखें कि अंतिम तत्व श्रेणी में शामिल नहीं है।

उदाहरण:

int[] x = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

int[] x2 = Arrays.copyOfRange(x, 5, 10);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOfRange(x, 5, 15);
String str3 = Arrays.toString(x3);


चर str2में मान होता है:
"[16, 17, 18, 19, 20]"

चर str3में मान होता है:
"[16, 17, 18, 19, 20, 0, 0, 0, 0, 0]"


4.Arrays.sort()

आह, सबसे स्वादिष्ट इलाज: छँटाई । प्रोग्रामिंग में Arrays को अक्सर सॉर्ट किया जाता है। सरणियों के साथ काम करते समय तीन सबसे आम क्रियाएं हैं:

  • एक सरणी छँटाई
  • किसी सरणी का न्यूनतम (या अधिकतम) तत्व ढूँढना
  • एक सरणी में एक तत्व के सूचकांक का निर्धारण (एक सरणी में एक तत्व ढूँढना)

यही कारण है कि जावा के रचनाकारों ने कक्षा sort()में विधि को शामिल किया। Arraysइसे कॉल करने जैसा दिखता है:

Arrays.sort(name);

यह विधि पारित सरणी को आरोही क्रम में क्रमबद्ध करती है।

उदाहरण:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x);

String str = Arrays.toString(x);



चर strमें मान होता है:
"[-20, -20, -20, -2, 0, 3, 8, 11, 99, 999]"

बहुत बढ़िया, है ना? आपने एक विधि कहा, और अब आपके पास एक क्रमबद्ध सरणी है। सुंदर।

वैसे, आप इस विधि का उपयोग न केवल संपूर्ण सरणी को सॉर्ट करने के लिए कर सकते हैं, बल्कि इसका केवल एक हिस्सा कर सकते हैं। इसे कॉल करने जैसा दिखता है:

Arrays.sort(name, first, last);

जहां पहले और आखिरी पहले और आखिरी कोशिकाओं के सूचकांक हैं जिन्हें सॉर्ट करना चाहिए।

जावा की पुरानी परंपरा के अनुसार, याद रखें कि अंतिम तत्व श्रेणी में शामिल नहीं है।

उदाहरण:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x, 4, 8);
String str = Arrays.toString(x);


चर strमें मान होता है:
"[11, -2, 3, 0, -20, -20, 8, 999, 99, -20]"

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

1000 तत्वों की सरणी को क्रमबद्ध करने में सरणी तत्वों की लगभग 3,000 तुलना शामिल होगी। दस लाख तत्वों की एक सरणी को सॉर्ट करने में लगभग 6 मिलियन तुलनाएँ शामिल होंगी।



5.Arrays.binarySearch()

ठीक है, और कक्षा के सबसे दिलचस्प तरीकों में से अंतिम Arraysएक सरणी में दिए गए मान की खोज करने में सक्षम है। यह कोई सामान्य खोज नहीं है — यह प्रिय बाइनरी खोज है । यह इस पर उबलता है:

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

क्योंकि सरणी को क्रमबद्ध किया गया है, एक ही तुलना में इसके आधे हिस्से को खत्म करना संभव है। फिर अगले चरण में, हम एक और आधा फेंक देते हैं, और इसी तरह।

यह दृष्टिकोण बाइनरी खोज को बहुत तेज़ बनाता है। दस लाख (!) तत्वों की एक सरणी में, यह वांछित तत्व की अनुक्रमणिका को केवल 20 तुलनाओं में पा सकता है। दृष्टिकोण की कमी यह है कि सरणी को पहले क्रमबद्ध किया जाना चाहिए, और छँटाई में भी समय लगता है।

इसे कॉल करने जैसा दिखता है:

int index = Arrays.binarySearch(name, value);

nameसरणी का नाम कहां है, जिसे पहले से ही क्रमबद्ध किया जाना चाहिए (उदाहरण के लिए, Arrays.sort()विधि का उपयोग करके)। और valueवह तत्व है जिसे हम सरणी में खोज रहे हैं। विधि द्वारा लौटाया गया परिणाम वांछित सरणी तत्व का सूचकांक है ।

उदाहरण:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};
Arrays.sort(x);

int index1 = Arrays.binarySearch(x, 0);
int index2 = Arrays.binarySearch(x, -20);
int index3 = Arrays.binarySearch(x, 99);
int index4 = Arrays.binarySearch(x, 5);
xहै:
{-20, -20, -20, -2, 0, 3, 8, 11, 99, 999}

4
1(सूचकांक 0और 2स्वीकार्य भी हैं)
8
-7

यदि सरणी में खोजे जा रहे तत्व के कई उदाहरण हैं, तो एल्गोरिथ्म केवल उनमें से एक का सूचकांक लौटाएगा (इस बात की कोई गारंटी नहीं है कि यह सबसे पहले, या इसके विपरीत होगा - इनमें से बहुत अंतिम डुप्लिकेट तत्व)।

यदि सरणी में तत्व नहीं मिला है, तो सूचकांक ऋणात्मक होगा।



Arrays6. कक्षा पर Oracle प्रलेखन से लिंक करें

यदि आप अत्यधिक रुचि रखते हैं, तो आप Arraysआधिकारिक दस्तावेज a href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base में कक्षा और इसके सभी तरीकों के बारे में सब कुछ पढ़ सकते हैं। /java/util/Arrays.html">ओरेकल वेबसाइट पर।

Arrays.mismatch()उदाहरण के लिए, आप और Arrays.compare()विधियों के बारे में पढ़ सकते हैं । शायद आप उन्हें किसी तरह उपयोगी पाएंगे।

और विधियों की संख्या से भ्रमित न हों। प्रत्येक विधि में 5-10 प्रकार होते हैं, जो केवल उनके पैरामीटर प्रकारों में भिन्न होते हैं।