JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ مجموعا | جاوا جمع

جاوا ۾ مجموعا | جاوا جمع

گروپ ۾ شايع ٿيل
سلام! گذريل ڪجھ سبقن ۾، اسان ArrayList ۾ مهارت حاصل ڪرڻ ۾ وڏي ترقي ڪئي آھي. تنهن هوندي، هن وقت دوران اسان صرف آسان آپريشن ڪيو: ختم ڪرڻ، داخل ڪرڻ، ڪنسول ڏانهن ٻاھر ڪڍڻ. يقينن، هي مسئلن جي فهرست جو خاتمو نه آهي جيڪي ڊولپرز کي منهن ڏيڻ وقت استعمال ڪندا آهن ArrayList . arrays ۽ Arrays ڪلاس بابت ليڪچر ياد رکو ؟ اهو خاص طور تي جاوا جي تخليق ڪندڙن پاران تيار ڪيو ويو آهي عام مسئلن کي حل ڪرڻ لاءِ جيڪي پروگرامر سامهون اچن ٿا جڏهن صفن سان ڪم ڪري رهيا آهن. ArrayList بابت ڇا ؟ يقيناً هن لاءِ به عام ڪمن جي ڪجهه فهرست آهي. ڇا اهي سڀ ڪجهه الڳ ڪلاس ۾ لاڳو ڪيا ويا هئا، يا ڇا اسان کي هر دفعي دستي طور تي گهربل رويي کي لکڻو پوندو؟ يقينا، توهان کي هر شيء پاڻ کي لکڻ جي ضرورت ناهي. سڀ کان وڌيڪ عام آپريشن جيڪي جاوا ۾ مجموعا استعمال ڪرڻ وقت ڪيا ويندا آھن اڳ ۾ ئي خاص جامد ڪلاس ڪليڪشن ۾ لاڳو ڪيا ويا آھن. ڪلاس جا مجموعا - 1

جاوا ۾ مجموعا

"مجموعو" جاوا ۾ ڪيترن ئي ڊيٽا جي جوڙجڪ لاء هڪ عام نالو آهي. ڊيٽا ڪيترن ئي مختلف طريقن سان محفوظ ڪري سگهجي ٿو. هينئر تائين اسان صرف اڀياس ڪيو آهي ArrayList ڪلاس ، جتي ڊيٽا هڪ صف ۾ محفوظ ڪئي ويندي آهي. باقي مجموعن کان پوءِ واقف ٿينداسين. ھاڻي اھو سمجھڻ لاءِ ڪافي آھي ته ڪليڪشن ڪلاس ڪم ڪرڻ لاءِ ٺاھيو ويو آھي نه رڳو ArrayList سان، پر جاوا ۾ ٻين قسمن جي مجموعن سان پڻ (ان ڪري، حقيقت ۾، ان جو نالو). تنهن ڪري، ڪهڙن ڪمن کي ڪليڪشن ڪلاس توهان کي حل ڪرڻ جي اجازت ڏئي ٿو جڏهن ArrayList سان ڪم ڪري رهيو آهي؟ پهريون ۽ سڀ کان وڌيڪ واضح آهي ترتيب ڏيڻ. arrays تي ليڪچر ۾، اسان انگن سان گڏ ھڪڙو مثال ڏٺو، ۽ ھاڻي اچو ته ھڪڙي مثال کي تارن سان ڏسو. مجموعن جي مواد کي ترتيب ڏيڻ لاءِ، ڪليڪشن ڪلاس ھيٺ ڏنل طريقو لاڳو ڪري ٿو sort():
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       System.out.println(solarSystem);

   }
}
نتيجو:

[Венера, Земля, Марс, Меркурий, Нептун, Сатурн, Уран, Юпитер]
سٽون الفابيٽ سان ترتيب ڏنل آهن! الفابيٽ جي ترتيب ۾ ڇو؟ ڪلاس کي Stringپروگرام ڪيو ويو آهي ته اهو طئي ڪرڻ لاءِ ته ڪيئن تارن جو هڪ ٻئي سان مقابلو ڪيو وڃي ٿو (خاص طور تي الفابيٽ سان). ڪلاسن لاءِ جيڪي توھان پاڻ ٺاھيندا، توھان پنھنجي مقابلي واري ميکانيزم کي لاڳو ڪري سگھوٿا، پر اسين ھن بابت ٻين ليڪچرن ۾ ڳالھائينداسين. اضافي طور تي، مجموعو ڪلاس توهان کي هڪ ۾ گهٽ ۾ گهٽ ۽ وڌ ۾ وڌ عنصر ڳولڻ جي اجازت ڏئي ٿو ArrayList. اهو طريقو min()۽ طريقن سان ڪيو ويندو آهي max():
public static void main(java.lang.String[] args) {

   ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
   System.out.println(Collections.max(numbers));
   System.out.println(Collections.min(numbers));

}
نتيجو:

7
1
اهو، يقينا، دستي طور تي ڪوڊ لکڻ کان تمام گهڻو آسان آهي سڀني عناصرن جي ذريعي وڃڻ ۽ سڀ کان وڏو/ننڍو عنصر ڳولڻ لاءِ :) ٻيو انتهائي مفيد طريقو آهي reverse(). جيڪڏهن اسان کي هڪ فهرست "ريورس" ڪرڻ جي ضرورت آهي ته جيئن عناصر ريورس آرڊر ۾ هئا، اسان اهو ڪيئن ڪنداسين؟ اهو شايد ايترو آسان نه هوندو ته پنهنجو پاڻ کي اهڙي الگورتھم لکڻ لاء :) خوش قسمت، طريقو reverse()اڳ ۾ ئي ڄاڻي ٿو ته اهو ڪيئن ڪجي. مثال طور، اسان اهو پسند نٿا ڪريون ته ڪيئن طريقي سان sort()اسان جي سيٽن کي الفابيٽ جي ترتيب ۾ ترتيب ڏنو ويو آهي، ۽ اسان ان ترتيب کي ريورس ڪرڻ چاهيون ٿا - Z کان A تائين:
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       Collections.reverse(solarSystem);
       System.out.println(solarSystem);

   }
}
نتيجو:

[Юпитер, Уран, Сатурн, Нептун, Меркурий, Марс, Земля, Венера]
رستي جي ذريعي، هتي اسين اڪثر ترتيب ڏيڻ، عناصر جي ترتيب، وغيره بابت ڳالهائينداسين. ڇا جيڪڏهن اسان جو ڪم بلڪل سامهون آهي؟ مثال طور، اسان هڪ لاٽري ميڪانيزم کي لاڳو ڪرڻ جي ڪوشش ڪري رهيا آهيون. اسان ريل ۾ 100 نمبر شامل ڪيا آهن، جيڪي هڪ وقت ۾ هڪ اسڪرين تي ظاهر ٿيڻ گهرجن. پهرين شرڪت ڪندڙ پنهنجي ٽڪيٽ تي سڀني نمبرن کي پار ڪرڻ لاء جيت. اهو طريقو استعمال ڪندي اهڙي ميڪانيزم کي لاڳو ڪرڻ بلڪل آسان آهي shuffle():
public class Main {

   public static void main(java.lang.String[] args) {

       ArrayList<Integer> lottery = new ArrayList<>(100);
       for (int i = 1; i <= 100; i++) {

           lottery.add(i);//add numbers from 1 to 100 to the drum
       }

       Collections.shuffle(lottery);//mix
       System.out.println("Attention! The first 10 numbers appear from the drum!");
       for (int i = 0; i < 10; i++) {

           System.out.println(lottery.get(i));
       }

   }
}
نتيجو:

Внимание! Из барабана появляются первые 10 чисел!
32
61
4
81
25
8
66
35
42
71
اهو سادو آهي! مسئلو حل ٿي ويو آهي، ۽ اسان جي راند جو ٽڪرو لکيو ويو آهي :) هاڻي اچو ته هڪ مختلف صورتحال تصور ڪريو. اڳي، اسان solarSystemان ۾ ڏنل سيٽن سان گڏ هڪ فهرست ٺاهي. ۽ اهو لڳي ٿو ته اسان سڀني کي مناسب آهي، جيڪڏهن هڪ شيء لاء نه: توهان ان مان عناصر کي هٽائي سگهو ٿا ۽ نوان شامل ڪري سگهو ٿا! اهو واضح طور تي اهو رويو ناهي جنهن جي اسان توقع ڪندا آهيون: اسان جي پروگرام ۾ شمسي نظام هڪ بدليل حالت ۾ هجڻ گهرجي. ڪليڪشن ڪلاس ۾ هڪ تمام دلچسپ طريقو آهي - unmodifiableList(). اهو ڏنل فهرست جو هڪ ناقابل قابل نسخو ٺاهي ٿو. ان کي شامل ڪرڻ يا ان کي ختم ڪرڻ ناممڪن ٿي ويندو. شمسي نظام جي سيٽن جي فهرست جي صورت ۾، اهو ئي آهي جيڪو اسان کي گهرجي!
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       List<String> solarSystem = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune)));
       solarSystem.add("Pluto");//try to add a new element
   }
}

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.Collections$UnmodifiableCollection.add(Collections.java:1075)
	at Main.main(Main.java:21)
غلطي: solarSystemھاڻي توھان ڪجھ به شامل نٿا ڪري سگھو! صرف هڪ شيء جيڪا توهان کي هن معاملي ۾ ڌيان ڏيڻ جي ضرورت آهي اها آهي ته متغير جو قسم هجڻ گهرجي List<>، ۽ نه ArrayList<>(هي طريقو بلڪل هن قسم جي اعتراض کي واپس ڏئي ٿو، سڀني قسمن جي فهرستن لاء عام). ٻي عام صورتحال جيڪا ڪم جي دوران ٿي سگهي ٿي اها آهي ته پروگرامر غلط ترتيب ۾ عناصر شامل ڪيو. جيڪڏهن ائين ٿيو، ۽ عطارد ۽ نيپچون غير متوقع طور تي جڳهن کي تبديل ڪيو، هيٺ ڏنل طريقو اسان کي هن غلطي کي درست ڪرڻ ۾ مدد ڏيندو swap():
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(neptune, venus, earth, mars
       , jupiter, saturn, uranus, mercury));// wrong planet order
       System.out.println(solarSystem);

       Collections.swap(solarSystem, solarSystem.indexOf(mercury), solarSystem.indexOf(neptune));
       System.out.println(solarSystem);

   }
}
اسان اسان جي لسٽ کي طريقي سان منظور ڪيو swap()، ۽ گڏوگڏ ٻن عنصرن جي اشارن کي تبديل ڪرڻ جي ضرورت آھي. مهرباني ڪري نوٽ ڪريو: طريقو خاص طور تي انڊيڪس سان ڪم ڪري ٿو، ۽ لنڪس سان نه. تنهن ڪري، هتي اسان کي هڪ طريقو جي ضرورت آهي ArrayList.indexOf(). نتيجو:

[Нептун, Венера, Земля, Марс, Юпитер, Сатурн, Уран, Меркурий]

[Меркурий, Венера, Земля, Марс, Юпитер, Сатурн, Уран, Нептун]
آخرڪار، اچو ته هڪ تمام دلچسپ طريقي سان واقف ٿي وڃو - disjoint(). اهو چيڪ ڪري ٿو ته ڇا ٻن مجموعن ۾ چونڪ آهن، اهو آهي، گهٽ ۾ گهٽ هڪ هڪجهڙو عنصر. جيڪڏهن نه، واپسي true، جيڪڏهن ها، واپسي false.
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystemPart1 = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars));
       ArrayList<String> solarSystemPart2 = new ArrayList<>(Arrays.asList(jupiter, saturn, uranus, neptune));

       System.out.println(Collections.disjoint(solarSystemPart1, solarSystemPart2));

   }
}
جئين توهان ڏسي سگهو ٿا، اسان جي ٻن لسٽن ۾ عناصر مڪمل طور تي مختلف آهن، تنهنڪري پروگرام جو نتيجو true. هي هڪ اهڙي دلچسپ ۽ تمام مفيد ڪلاس آهي. جهڙوڪ Arrays، هو اسان لاءِ تمام گهڻو معمولي، معمولي ڪم ڪري ٿو، اسان کي ٻين شين تي ڌيان ڏيڻ جي اجازت ڏئي ٿو. ان جي باري ۾ پڙهو Oracle دستاويزن ۾ ، اتي ٻيا طريقا آهن.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION