ہائے! پچھلے کچھ اسباق میں، ہم نے اپنی مہارت میں بہت ترقی کی ہے
ArrayList
۔ تاہم، اب تک ہم نے صرف آسان ترین کارروائیاں کی ہیں: ہٹانا، داخل کرنا اور ڈسپلے کرنا۔ بلاشبہ، اس میں ان کاموں کی مکمل فہرست شامل نہیں ہے جو ڈیولپرز کے ساتھ کام کرتے وقت انجام دینے چاہئیں ArrayList
۔ arrays اور کلاس کے بارے میں سبق یاد ہے Arrays
؟ جاوا کے تخلیق کاروں نے خاص طور پر اس کلاس کو سب سے عام کاموں کو سنبھالنے کے لیے ڈیزائن کیا ہے جو پروگرامرز کو صفوں کے ساتھ کام کرتے وقت درپیش ہوتے ہیں۔ اور کیا ArrayList
؟ یقینی طور پر، عام کاموں کی کچھ فہرست ہے جو اس کے ساتھ انجام دینے کی ضرورت ہے۔ کیا ان سب کو کسی مخصوص طبقے میں لاگو کیا گیا ہے، یا ہمیں ہر بار اپنا نفاذ لکھنا پڑتا ہے؟ یقینا، آپ کو سب کچھ خود لکھنے کی ضرورت نہیں ہے۔ مجموعے پر مشتمل سب سے عام کارروائیاں پہلے ہی خصوصی جامد Collections
کلاس میں لاگو ہو چکی ہیں۔ جاوا میں، ڈیٹا ڈھانچے کے ایک گروپ کو عام طور پر مجموعہ کہا جاتا ہے ۔ ڈیٹا کو بہت سے مختلف طریقوں سے محفوظ کیا جا سکتا ہے۔ اب تک، ہم نے صرف اس کلاس کا مطالعہ کیا ہے، جہاں ڈیٹا کو ایک صف میں محفوظ کیا جاتا ہے۔ ہم بعد میں دوسرے مجموعوں سے واقف ہوں گے۔ ابھی کے لیے، صرف یہ سمجھنا کافی ہے کہ کلاس کو نہ صرف کے ساتھ ، بلکہ دیگر اقسام کے مجموعوں (اس لیے، اس کا نام) کے ساتھ بھی کام کرنے کے لیے ڈیزائن کیا گیا ہے۔ تو، کلاس کن کاموں کے ساتھ کام کرتے وقت درحقیقت مدد کرتی ہے ؟ پہلا اور سب سے واضح چھانٹنا ہے۔ صفوں کے بارے میں سبق میں، ہم نے اعداد کے ساتھ ایک مثال پر غور کیا۔ اب ہم تاروں کے ساتھ ایک مثال پر غور کریں گے۔ کلاس مجموعوں کے مواد کو ترتیب دینے کے طریقہ کار کو نافذ کرتی ہے :ArrayList
Collections
ArrayList
Collections
ArrayList
Collections
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
دراصل اس منطق کو نافذ کرتی ہے جو اس بات پر حکمرانی کرتی ہے کہ تاروں کا موازنہ کیسے کیا جاتا ہے (جو حروف تہجی کے لحاظ سے ہوتا ہے)۔ ان کلاسوں کے لیے جو آپ خود بناتے ہیں، آپ اپنی موازنہ کی منطق کو نافذ کر سکتے ہیں، لیکن ہم اس کے بارے میں دوسرے اسباق میں بات کریں گے۔ کلاس Collections
آپ کو ایک میں کم از کم اور زیادہ سے زیادہ عنصر تلاش کرنے میں بھی مدد کرتی ہے 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> bingoDrum = new ArrayList<>(100);
for (int i = 1; i <= 100; i++) {
bingoDrum.add(i);// add the numbers 1 to 100 to the drum
}
Collections.shuffle(bingoDrum);// Mix it up
System.out.println ("Your attention, please! Here are the first 10 numbers from the drum!");
for (int i = 0; i < 10; i++) {
System.out.println(bingoDrum.get(i));
}
}
}
آؤٹ پٹ: آپ کی توجہ، براہ مہربانی! ڈھول سے پہلے 10 نمبر یہ ہیں! 32 61 4 81 25 8 66 35 42 71 یہ اتنا آسان ہے! مسئلہ حل ہو گیا، اور کھیل کا ہمارا حصہ لکھا ہوا ہے :) اب آئیے ایک مختلف صورت حال کا تصور کرتے ہیں۔ اس سے پہلے، ہم نے ایک solarSystem
فہرست بنائی تھی جس میں سیارے موجود تھے۔ اور ایسا لگتا ہے کہ یہ ایک کے علاوہ ہر طرح سے ہمارے مطابق ہے: آپ اس سے آئٹمز کو حذف کر سکتے ہیں اور نئی چیزیں شامل کر سکتے ہیں ! یہ واضح طور پر وہ رویہ نہیں ہے جس کی ہم توقع کرتے ہیں: ہمارے پروگرام میں نظام شمسی کو ناقابل تبدیلی ہونا چاہیے۔ کلاس Collections
کا ایک بہت ہی دلچسپ طریقہ ہے: 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
}
}
آؤٹ پٹ: تھریڈ "main" java.lang.UnsupportedOperationException میں java.util.Collections$UnmodifiableCollection.add(Collections.java:1075) پر 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));// The planets are in the wrong order
System.out.println(solarSystem);
Collections.swap(solarSystem, solarSystem.indexOf(mercury), solarSystem.indexOf(neptune));
System.out.println(solarSystem);
}
}
ہم swap()
اپنی فہرست کے طریقہ کار اور دو عناصر کے اشاریہ جات کو منتقل کرتے ہیں جن کو تبدیل کرنے کی ضرورت ہے۔ نوٹ کریں کہ طریقہ انڈیکس کے ساتھ کام کرتا ہے، حوالہ جات کے ساتھ نہیں۔ تو، یہاں ہمیں طریقہ استعمال کرنا پڑا ArrayList.indexOf()
۔ آؤٹ پٹ: [نیپچون، وینس، زمین، مریخ، مشتری، زحل، یورینس، مرکری] [مرکری، زہرہ، زمین، مریخ، مشتری، زحل، یورینس، نیپچون] آخر میں، ہم ایک بہت ہی دلچسپ طریقہ سے واقف ہوں گے: disjoint()
. یہ چیک کرتا ہے کہ آیا دو مجموعے ایک دوسرے کو آپس میں ملاتے ہیں، یعنی، آیا ان میں کم از کم ایک یکساں عنصر ہے ۔ اگر وہ ایسا نہیں کرتے ہیں، تو یہ سچ ہے. یہ وہ کرتے ہیں، پھر یہ جھوٹا لوٹتا ہے۔
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
، یہ ہمارے لیے بہت زیادہ معمول، تھکا دینے والا کام کرتا ہے، ہمیں دوسری چیزوں پر توجہ مرکوز کرنے دیتا ہے۔
GO TO FULL VERSION