JavaRush /جاوا بلاگ /Random-SD /Arrays ڪلاس ۽ ان جو استعمال

Arrays ڪلاس ۽ ان جو استعمال

گروپ ۾ شايع ٿيل
هڪ ڀيرو ٻيهر ڀليڪار! :) پوئين سبق ۾، اسان هڪ اهڙي ڊيٽا ڍانچي کان واقف ٿياسين جيئن هڪ array (Java array)، سکيا ته ڪيئن arrays ٺاهيا وڃن، انهن کي ڊيٽا سان ڀريو، ۽ اهو پڻ سکيو ته اهي ڪيئن ميموري ۾ محفوظ ٿين ٿا. اڄ اسان ڪجهه ڪمن ۽ مثالن تي نظر ڪنداسين جيڪي توهان کي حقيقي ڪم ۾ ملندا. مثال طور، هن صورتحال کي تصور ڪريو: اسان وٽ 10 انگن جو هڪ صف آهي جيڪو بي ترتيب ترتيب ۾ لکيل آهي.
//array Java, example
int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};
اسان جو ڪم اهو آهي ته هن صف کي وڌندي ترتيب ۾ ترتيب ڏيو: ننڍي کان وڏي انگ تائين. آخر ۾ ان کي هن طرح ڏسڻ گهرجي:
[-234, -2, 16, 26, 35, 43, 80, 92, 99, 167]
اسان اهو ڪيئن ٿا ڪريون؟ ڪم غير معمولي آهي، اسان اهو اڳ ڪڏهن به نه ڪيو آهي:/ ڪو خيال؟ اندازو لڳائڻ جي ڪوشش ڪريو. هتي اسان ڇا ڪري سگهون ٿا، مثال طور:
  • صف جي سڀني عناصر ذريعي ٻيهر ڪريو. هر عنصر جي مقابلي ۾ ايندڙ سان ( [0]سا [1]، [1]سان [2]، [2]سان ، [3]وغيره). جيڪڏهن موجوده صف جو عنصر ايندڙ هڪ کان وڏو آهي، اسان انهن کي تبديل ڪريون ٿا ۽ ايندڙ عنصر ڏانهن وڃو. جيڪڏهن نه، ان کي ڇڏي ڏيو ۽ اڳتي وڌو.

  • اهڙيء طرح، صف جي عناصر جي ذريعي پهرين پاس کان پوء، سڀ کان وڏو قدر (167) آخري سيل ۾ هجڻ جي ضمانت آهي.

  • ھاڻي اچو ته صف جي سڀني عنصرن کي ٻيهر ڏسون، انڊيڪس سان عنصر سان شروع ڪريون [0]، پر آخري عنصر تائين (سڀ کان وڏو انگ اڳ ۾ ئي پنھنجي جاءِ تي آھي) ۽ ساڳيون موازنہون ۽ ادل بدليون. 
    آخر ۾، آخري سيل ۾ اسان وٽ ٻيو نمبر وڏو قدر هوندو (99).

  • اچو ته هن ڪم کي ڪيترائي ڀيرا ورجائيون جيئن اسان وٽ صف ۾ مائنس ون عنصر آهن.
Arrays ڪلاس ۽ ان جو استعمال - 2اسان خيال سان آياسين، باقي اهو سڀ ڪجهه ڪوڊ لکڻ آهي. اهو هن طرح نظر ايندو:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       for (int i = numbers.length - 1; i > 0; i--) {
           for (int j = 0; j < i; j++) {
           /* Compare the elements in pairs,
             if they are in the wrong order,
             then swap them */
               if (numbers[j] > numbers[j + 1]) {
                   int tmp = numbers[j];
                   numbers[j] = numbers[j + 1];
                   numbers[j + 1] = tmp;
               }
           }
       }

   }
}
ام... اهو ٿورڙو پيچيده لڳي ٿو -_- جيتوڻيڪ آپريشن جو عام اصول واضح آهي، توهان کي تمام گهڻو ڪوڊ لکڻو پوندو ته جيئن بظاهر آسان ڪم کي حل ڪرڻ لاءِ. ٺيڪ، شايد اسان صرف پنهنجو پاڻ کي وڌايو؟ شايد، جيڪو ڪم اسان ورتو آهي، اهو اسان لاء تمام ڏکيو آهي. اچو ته ڪجهه آسان ڪرڻ جي ڪوشش ڪريو. مثال طور، اچو ته انگن جي ساڳي صف کي وٺو.
int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};
اسان جو ڪم ان جي مواد کي ٻئي صف ۾ نقل ڪرڻ آهي.
int [] numbersCopy = new int[10];
سوچيو ته توهان اهو ڪيئن ڪندا ته توهان وٽ اڳ ۾ ئي موجود صفن بابت ڄاڻ استعمال ڪندي؟ توھان ڪري سگھو ٿا، مثال طور، ھڪڙي صف ذريعي لوپ ڪريو numbers۽ ان جي عناصر کي ھڪڙي ھڪڙي ۾ لکو numbersCopy:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = new int[10];

       for (int i = 0; i < numbers.length; i++) {

           numbersCopy[i] = numbers[i];
       }

   }
}
خير، اسان ان کي وڌيڪ يا گهٽ ڪيو آهي! لڳي ٿو مسئلو حل ٿي ويو آهي، پر ٻيهر: جيڪڏهن ان کي عام طور تي عمل ڪرڻ جي ضرورت آهي، ڪوڊ ۾ هڪجهڙائي واري لوپ جو هڪ گروپ هوندو. حقيقت ۾، اهي ۽ ٻيا مسئلا جاوا جي تخليق ڪندڙن پاران ڊگهي عرصي کان حل ڪيا ويا آهن، ۽ اسان کي ضرورت نه آهي ته "ٻيهر جي ڦيٿي" ۽ ڪجهه ڪوڊ لکڻ لاء اسان جي پنهنجي حل لاء.

Java Arrays ڪلاس

هڪ خاص جاوا ڪلاس توهان کي عام مسئلا حل ڪرڻ ۾ مدد ڪندو جڏهن arrays سان ڪم ڪري رهيو آهي - Arrays. طريقن کي شامل ڪيو ويو آھي ھن طبقي ۾ سڀ کان وڌيڪ عام مسئلن کي حل ڪرڻ لاء جيڪي جاوا پروگرامر پنھنجي ڪم ۾ سامھون ڪن ٿا. مثال طور، هڪ صف کي ترتيب ڏيڻ جو ڪم، جنهن لاء اسان پاڻ کي حل ڪرڻ جي ڪوشش ڪئي، هڪ قطار ۾ حل ڪري سگهجي ٿو:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       Arrays.sort(numbers);

       System.out.println(Arrays.toString(numbers));

   }
}
طريقو Arrays.sort()صفن کي ترتيب ڏئي ٿو. ان کان علاوه، ان ۾ شامل ڪيل الگورتھم ان کي ڪوڊ کان وڌيڪ موثر بڻائي ٿو جيڪو اسان لکيو آھي. ڪنسول آئوٽ:

[-234, -2, 16, 26, 35, 43, 80, 92, 99, 167]
مهرباني ڪري نوٽ ڪريو: صف کي اسٽرنگ ۾ تبديل ڪرڻ لاءِ، اسان هڪ ٻيو ڪلاس طريقو استعمال ڪيو Arrays- Arrays.toString(). جاوا صفا پاڻ کي اوور رائڊ نٿا ڪن toString(). پوء جيڪڏھن توھان صرف لکندا آھيو
System.out.println(numbers.toString());
toString()ڪلاس جو طريقو سڏيو ويندو Object. arrays جي صورت ۾، آئوٽ پٽ ڪجهه هن طرح ٿيندو:

[I@4554617c
هاڻي اسان تفصيل ۾ نه وينداسين ڇو ته نتيجو هي طريقو آهي؛ بنيادي شيء اها آهي ته اهو واضح طور تي نه آهي جيڪو اسان کي گهرجي. پر Arrays.toString() اهو ڪيو جيڪو اسان چاهيون ٿا. رستي ۾، اسان جو نقل ڪرڻ جو مسئلو پڻ آساني سان ڪلاس ۾ حل ڪيو ويو آهي Arrays:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOf(numbers, numbers.length);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
طريقي سان Arrays.copyOf()اسان پنهنجي اصل صف کي پاس ڪريون ٿا (جنهن مان اسان کي قيمتن کي نقل ڪرڻ جي ضرورت آهي) ۽ نئين سر جي ڊيگهه جنهن ۾ اسان ڊيٽا کي نقل ڪريون ٿا. انهي حالت ۾، اسان اشارو ڪيو آهي ڊيگهه numbers.length، ڇاڪاڻ ته اسان سڄي صف کي نقل ڪرڻ چاهيون ٿا. جيڪڏهن اسان صرف پهرين چند عناصر کي نقل ڪرڻ چاهيون ٿا، اسان نئين سر لاء ننڍڙي ڊيگهه بيان ڪري سگهون ٿا:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOf(numbers, 4);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
هتي اسان وضاحت ڪئي آهي ته نئين سر جي ڊيگهه 4 آهي. ان مطابق، صرف پهرين 4 عنصرن کي numbersنئين سري ۾ نقل ڪيو ويندو. ڪنسول آئوٽ:

[167, -2, 16, 99]
رستي ۾، جيڪڏهن توهان کي هڪ صف جو حصو نقل ڪرڻ جي ضرورت آهي، پر شروع کان نه، پر "وچ کان"، Arraysتوهان اهو پڻ ڪري سگهو ٿا:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOfRange(numbers, 2,6);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
نتيجو:

[16, 99, 26, 92]
سيلز کان نمبر ٻه ( شامل ) کان ڇهه ( شامل نه آهن ) نئين صف ۾ نقل ڪيا ويا. ان کان علاوه، اسان کي هڪ ٻئي سان ٻن صفن جي مقابلي ڪرڻ جي ضرورت پوندي. جيئن ته طريقي سان toString()، arrays پاڻ طريقي کي ختم نه ڪندا آهن equals(). تنهن ڪري جيڪڏهن اسان انهن کي هن طرح موازنہ ڪرڻ جي ڪوشش ڪندا آهيون:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {1, 2, 3};
       int[] numbers2 = {1, 2, 3};

       System.out.println(numbers.equals(numbers2));
   }
}
اسان نتيجو حاصل ڪريون ٿا false. Object.equals()آخرڪار، اهو طريقو جيڪو لنڪن جي مقابلي کي سڏيو ويندو . ۽ يقينا اهي مختلف آهن! پر اسان کي صفن جي مواد جو مقابلو ڪرڻ جي ضرورت آهي، نه لنڪس. ڪلاس Arrays۾ ھڪڙو ختم ٿيل طريقو آھي equals()جيڪو اھو ئي ڪري ٿو جيڪو اسان کي گھرجي:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {1, 2, 3};
       int[] numbers2 = {1, 2, 3};

       System.out.println(Arrays.equals(numbers, numbers2));
   }
}
نتيجو:

true
رستي جي ذريعي، ڪلاس Arraysڪاميابيء سان ڪم ڪري ٿو نه رڳو عام صفن سان، پر ٻه طرفي وارن سان پڻ:
public class Main {

   public static void main(String[] args) {

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

       int[][] numbersCopy = Arrays.copyOf(numbers, numbers.length);

       System.out.println("Are these two-dimensional arrays equal to each other?");
       System.out.println(Arrays.deepEquals(numbers, numbersCopy));

       System.out.println(Arrays.deepToString(numbersCopy));
   }
}
نتيجو:

Равны ли эти двумерные массивы между собой?
true
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
جئين توهان ڏسي سگهو ٿا، طريقو Arrays.copyOf()هڪ ٻه-dimensional صف کي نقل ڪرڻ سان گڏ. مهرباني ڪري نوٽ ڪريو ته هن صورت ۾، جڏهن هڪ ٻه-dimensional صف کي نقل ڪندي، هڪ نام نهاد "آٿلي ڪاپي" ٿئي ٿي. ۽ ٻه-dimensional arrays جي مقابلي لاءِ ۽ انھن کي ڪنسول ڏانھن ٻاھر ڪڍڻ لاءِ، خاص طريقا مهيا ڪيا ويا آھن - deepEquals۽ deepToString()؛ مستقبل ۾، توهان هڪ کان وڌيڪ ڀيرا ڏسندا (۽ ان جي باري ۾ خوش ٿيو) ته جاوا جي تخليق ڪندڙ ڪيترن ئي عام حالتن جي اڳڪٿي ڪئي آهي جيڪي پروگرامرز کي منهن ڏيڻ ۾ اچن ٿا جڏهن ڪم ڪري رهيا آهن، ۽ انهن لاء تيار ڪيل حل کي لاڳو ڪيو ٻوليء ۾. انهن حلن کي استعمال ڪرڻ تمام سولو ۽ وڌيڪ سولو آهي ٻيهر ايجاد ڪرڻ واري سائيڪلن کان، صحيح؟ :) پڙهڻ جي پڪ ڪريو OracleArrays ويب سائيٽ تي ڪلاس دستاويزن . توهان جي پڙهائي سان سٺي قسمت!
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION