CodeGym /جاوا بلاگ /Random-SD /جاوا گڏ ڪرڻ جي ترتيب ()
John Squirrels
سطح
San Francisco

جاوا گڏ ڪرڻ جي ترتيب ()

گروپ ۾ شايع ٿيل
سڀ کان وڌيڪ عام ڪمن مان هڪ آهي جنهن جي اسان کي ضرورت آهي جيئن ڊولپرز ڊيٽا سان ڊيل ڪندي آهي ترتيب ڏيڻ-- اسان جي ڊيٽا کي ترتيب ڏيڻ جي قابل ٿيڻ سان، اسان پنهنجي الگورتھم کي بهتر ڪري سگھون ٿا تمام تيز هلائڻ لاء، ۽ ڊيٽا کي ڳولي سگھون ٿا جيڪو ان جي ضرورت آهي وقت جي هڪ حصي ۾. ٻي صورت ۾ وٺي ويندي. اڄ جي سبق ۾، اسان جاوا ڪليڪشن جي ترتيب () بابت ڳالهائينداسين. هڪ تڪڙو سوچڻ واري تجربي جي طور تي: تصور ڪريو ته توهان يونيورسٽي جي لسٽ ذريعي نالو ڳولي رهيا آهيو. هن اسڪول ۾ هزارين شاگرد ٿي سگهن ٿا. جيڪڏهن توهان کي ڏنل فهرست الفابيٽ جي ترتيب ۾ نه هئي، ته توهان کي هر هڪ صفحي کي ڦيرايو ۽ تمام احتياط سان ڏسڻو پوندو ته پڪ ڪرڻ لاءِ ته توهان ڪٿي به هڪ نالو نه ڇڏيو آهي، جيستائين توهان آخرڪار اهو نالو نه ڳوليو جيڪو توهان ڳولي رهيا آهيو. ٻئي طرف، جيڪڏهن لسٽ کي الفابيٽائيز ڪيو ويو هو، نه رڳو توهان کي پنهنجي ڳولا ۾ گهٽ سخت ٿيڻو پوندو، پر توهان آساني سان لسٽ ۾ ساڳئي پهرين اکر سان سيڪشن ڏانهن ٽپو ڏئي سگهو ٿا، ۽ وڏين لپين ۾ صفحن جي چوڌاري ٽپو جاري رکي سگهو ٿا. جيستائين توھان ان شخص تي پھچي وڃو جنھن کي توھان ڳولي رھيا ھئا. وڌيڪ ڊيٽا توهان سان ڪم ڪري رهيا آهيو، وڌيڪ اهم اهو آهي ته توهان ان کي استعمال ڪري رهيا آهيو جيئن ممڪن طور تي مؤثر ۽ موثر طريقي سان. هن آرٽيڪل ۾، اسان جاوا ۾ ڪنهن به لسٽ تي عمل درآمد کي ڪيئن ترتيب ڏيو (بشمول ArrayList) گڏ ڪرڻ جو طريقو استعمال ڪندي.

جاوا ۾ ArrayList کي ڪيئن ترتيب ڏيو جاوا ڪليڪشن جي ترتيب جو طريقو استعمال ڪندي

اچو ته جاوا Collections.sort طريقي جي باري ۾ ڳالهايون. java.util پيڪيج ۾ ڪيتريون ئي ڪارآمد افاديتون ۽ پيڪيجز شامل آهن جيڪي اڪثر ڊولپرز پاران استعمال ڪيا ويندا آهن، بشمول ArrayList. فرض ڪريو توھان وٽ ھيٺ ڏنل سادي پروگرام آھي:
import java.util.*;
import java.io.*;
class Main{
     public static void main(String[] args){
          List<String> colors = new ArrayList<String>();
          colors.add("Red    ");
          colors.add("Orange");
          colors.add("Green");
          colors.add("Blue");
    }
}
توھان چاھيو ٿا رنگن جي لسٽ کي پرنٽ ڪرڻ جي قابل، پر الفابيٽ جي ترتيب ۾. توهان اهو ڪيئن ڪري سگهو ٿا؟ java.util.Collections استعمال ڪندي، ترتيب ڏيڻ آسان آهي جيئن ون لائنر:

Collections.sort(colors);
تا-دا! توھان جي رنگن جي فهرست ھاڻي ترتيب ڏنل آھي. جيڪڏهن توهان لسٽ کي پرنٽ ڪرڻ چاهيندا هئا، جيئن ته:

System.out.println(colors);
پوء توھان ھيٺ ڏنل ٻاھر حاصل ڪندا.

[Blue, Green, Orange, Red]
اهو ڪيترو آسان هو؟! اهو Collections.sort() استعمال ڪرڻ بلڪل آسان هوندو ان معاملي لاءِ Integers، Floats، يا ڪنهن ٻئي سادي ڊيٽا جي قسم جي فهرست کي ترتيب ڏيڻ لاءِ. پر ڇا جيڪڏھن توھان چاھيو ته ھيٺئين ترتيب ۾ ترتيب ڏيو؟ يقيناً اهڙا ڪيس آهن جتي اهو سمجھ ۾ اچي ٿو- تصور ڪريو ته توهان وٽ هڪ مخصوص طبقي لاءِ ٽيسٽ اسڪور جي فهرست هئي، ۽ توهان اهو معلوم ڪرڻ چاهيو ته اعليٰ اسڪور ڪندڙ شاگرد ڪير آهن. فهرست کي ترتيب ڏيڻ لاءِ وڌيڪ معنيٰ رکي ٿي (سڀ کان وڌيڪ اسڪور پهريون)، ته جيئن توهان جيڪي جواب ڳولي رهيا آهيو اهي مٿي تي صحيح آهن. شڪرگذار، Collections.sort() هڪ اختياري 2nd پيٽرولر سان مٿي لکيو ويو آهي، جيڪو توهان کي صرف اهو ڪرڻ جي اجازت ڏئي ٿو:

sort(List l, Comparator c)
پر هڪ comparator ڇا آهي؟ خير، هڪ comparator صرف هڪ فنڪشن آهي جيڪو ٻن ان پٽن جو مقابلو ڪري ٿو ۽ هڪ انگ ڏيکاري ٿو جنهن جي نمائندگي ڪندڙ ان پٽ پهرين اچي ٿو. جيڪڏھن توھان ترتيب ڪري رھيا آھيو ھڪڙي ArrayList جي ابتدائي ڊيٽا جي قسمن جي، پوءِ جاوا ڪليڪشن اڳ ۾ ئي توھان کي مهيا ڪري ٿو ھڪڙو reverseOrder() comparator. اهو هن طرح سڏي سگهجي ٿو:

Collections.sort(colors, Collections.reverseOrder());
هاڻي، رنگن کي ريورس ترتيب ڏني وئي آهي ان جي جاء تي، انهي ڪري ته جيڪڏهن توهان ان کي پرنٽ ڪيو، توهان کي هيٺ ڏنل پيداوار ملندي:

[Red, Orange, Green, Blue]

جاوا ۾ غير ابتدائي ڊيٽا جي قسمن کي ترتيب ڏيڻ لاءِ مجموعا ڪيئن استعمال ڪجي

هينئر تائين، توهان ڏٺو آهي ته Collections.sort() طريقو استعمال ڪندي جاوا ۾ strings يا ints جي ArrayLists کي ترتيب ڏيڻ ايترو ئي آسان آهي جيترو ڪوڊ جي هڪ لائن. پر اڪثر وقت، توهان جي ArrayLists کي محفوظ ڪيو ويندو غير ابتدائي ڊيٽا جي قسمن. جڏهن توهان ڊيٽا سان ڪم ڪري رهيا آهيو جنهن ۾ وڌيڪ پيچيده خاصيتون آهن، توهان انهن شين جي نمائندگي ڪرڻ لاء ڪلاس لکڻ چاهيندا ۽ انهن جي خاصيتن کي استعمال ڪندي هڪ ٻئي سان ڪيئن مقابلو ڪيو ويندو. ان جو هڪ مثال ڳولڻ لاءِ، اچو ته رنگن جي فهرست کي ترتيب ڏيڻ جي مثال کي ٻيهر ڏسو، پر هن ڀيري، Strings کي ترتيب ڏيڻ بدران، اسان رنگن جي شين کي ترتيب ڏينداسين. اسان جو بنيادي رنگ طبقو شايد ڪجهه هن طرح نظر اچي ٿو:
public class Color{
	private int r;
	private int g;
	private int b;
	private String name;

	Color(String name, int red, int green, int blue){
   	this.name = name;
    	this.r = red;
   	this.g = green;
   	this.b = blue;
	}
}
اسان جي رنگ جي ڪلاس کي Collections.sort() سان مطابقت پيدا ڪرڻ لاءِ، ته جيئن ڪليڪشن سمجهي سگهن ته رنگين شين جو مقابلو ۽ ترتيب ڪيئن ڪجي، اسان کي ٻه ننڍيون تبديليون ڪرڻ گهرجن:
  1. رنگ کي هڪ تقابلي شئي ٺاهيو (مقابلي قابل<Object> لاڳو ڪرڻ شامل ڪريو)
  2. ڪلاس ۾ compareTo طريقي کي اوور رائڊ ڪريو (عوامي انٽ compareTo (Object o) کي ختم ڪريو)
انهن تبديلين سان، اسان جو ڪلاس هاڻي هن طرح نظر اچي ٿو:
public class Color implements Comparable<Object>{
	private int r;
	private int g;
	private int b;
	private String name;

	Color(int red int green, int blue, String name){
    	this.r = red;
   	this.g = green;
   	this.b = blue;
   	this.name = name;
	}

	@Override
	public int compareTo(Object o) {
    	Color c = (Color) o;
    	return this.name.compareTo(c.name);
	}
}
نوٽ ڪريو ته Color's compareTo طريقو صرف اسٽرنگ جي compareTo طريقي کي سڏي ٿو. ترتيب ڏنل الفابيٽ جي ترتيب ۾ ڪئي ويندي. جيڪڏهن اسان ڳاڙهي قدر جي ترتيب سان ترتيب ڏيڻ چاهيون ٿا، مثال طور، اسان واپسي واري بيان کي واپسي سان تبديل ڪري سگهون ٿا this.r - cr; (جيڪڏهن اسان چاهيون ٿا ته گرين قدر جي ترتيب سان ترتيب ڏنل ترتيب ۾، اهو واپسي cg - this.g؛) هوندو. هاڻي، جيڪڏهن اسان کي سڏين ٿا

Collections.sort(colors);
صرف Strings جي بجاءِ رنگن جي ArrayList تي، اهو ڪم ڪندو ڇو ته ڪليڪشن سمجهي ٿو ته رنگين شين جو مقابلو ڪيئن ڪجي. جيڪڏھن توھان نٿا چاھيو توھان پنھنجي اعتراض کي Comparable<Object> تي عمل ۾ آڻيو، توھان متبادل طور تي پنھنجي ڪلاس لاءِ ڪامپريٽر لکي سگھوٿا، ۽ ان کي 2-پيراميٽر Collections.sort() طريقي ۾ پاس ڪريو. ھڪڙو موازنہ ڪندڙ ھڪڙي طريقي کي ختم ڪري ٿو عوامي int compare (Object one, Object two)، ۽ Collections.sort() طريقو ھي استعمال ڪري ٿو شين کي ترتيب ڏيڻ لاءِ. SortByName ۽ SortByRed comparators جو مثال ھيٺ ڏنل آھي:
class SortByName implements Comparator<Color>
{
	public int compare(Color a, Color b)
	{
    	return a.name.compareTo(b.name);
	}
}

class SortByRGB implements Comparator<Color>
{
	public int compare(Color a, Color b)
	{
    	return a.r - b.r;
	}
}
هن سان، توهان هاڻي ڪال ڪري سگهو ٿا

Collections.sort(colors, new SortByName());
رنگ ڪلاس کان سواء اصل ۾ تقابلي کي لاڳو ڪرڻ، ۽ اهو اڃا تائين ڪم ڪندو. ڪڏهن ڪڏهن، توهان ڏسندا ته اهو ٿي چڪو آهي ان لائن، استعمال ڪندي ليمبڊا افعال. هڪ lambda فنڪشن لازمي طور تي هڪ بي نام فنڪشن آهي جنهن کي توهان ڪوڊ جي لائن ۾ وضاحت ڪري سگهو ٿا، جيڪو ان کي سڏيندو آهي. اهي ڪارآمد آهن جڏهن توهان کي صرف هڪ خاص مثال لاءِ هڪ فنڪشن کي سڏڻ جي ضرورت آهي ۽ نه ٿا چاهيو ته مڪمل الڳ فنڪشن ٻئي هنڌ بيان ڪيو وڃي. SortByName comparator ان لائن ۾ وضاحت ڪري سگهجي ٿو، هڪ lambda فنڪشن استعمال ڪندي، هن طرح:

Collections.sort(colors, (a, b)-> {
          return a.name.compareTo(b.name)});
جيئن توهان اندازو لڳايو هوندو، (a، b) ليمبڊا جي ڪمن جي ماپن جي نمائندگي ڪري ٿو (ٻن شين جي مقابلي ۾). The -> اشارو ڪري ٿو ته ڇا هيٺ ڏنل آهي ليمبڊا فنڪشن جي تعريف. اهو ان جي باري ۾ آهي! توھان ھاڻي ڏٺو آھي جاوا ۾ ArrayLists کي ترتيب ڏيڻ جا سڀ کان مشهور طريقا Collections پيڪيج استعمال ڪندي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION