JavaRush /جاوا بلاگ /Random-UR /جاوا میں مجموعے | جاوا کے مجموعے۔

جاوا میں مجموعے | جاوا کے مجموعے۔

گروپ میں شائع ہوا۔
ہیلو! پچھلے کچھ اسباق میں، ہم نے ArrayList میں مہارت حاصل کرنے میں بہت ترقی کی ہے۔ تاہم، اس وقت کے دوران ہم نے صرف سب سے آسان آپریشن کیے: کنسول کو حذف کرنا، داخل کرنا، آؤٹ پٹ کرنا۔ یقینا، یہ ان مسائل کی فہرست کا اختتام نہیں ہے جن کا استعمال کرتے وقت ڈویلپرز کو ArrayList کا سامنا کرنا پڑتا ہے ۔ arrays اور Arrays کلاس کے بارے میں لیکچر یاد رکھیں ؟ اسے جاوا کے تخلیق کاروں نے خاص طور پر عام مسائل کو حل کرنے کے لیے تیار کیا تھا جو پروگرامرز کو صفوں کے ساتھ کام کرتے وقت درپیش ہوتے ہیں۔ ArrayList کے بارے میں کیا خیال ہے ؟ یقیناً اس کے لیے بھی کچھ مخصوص کاموں کی فہرست ہے۔ کیا ان سب کو کسی الگ کلاس میں لاگو کیا گیا تھا، یا ہمیں ہر بار دستی طور پر مطلوبہ رویہ لکھنا پڑے گا؟ یقینا، آپ کو سب کچھ خود لکھنے کی ضرورت نہیں ہے۔ جاوا میں کلیکشنز کا استعمال کرتے وقت سب سے زیادہ عام آپریشنز پہلے ہی ایک خاص جامد کلاس کلیکشنز میں لاگو کیے جا چکے ہیں۔ کلاس کے مجموعے - 1

جاوا میں مجموعے۔

"مجموعہ" جاوا میں متعدد ڈیٹا ڈھانچے کا ایک عام نام ہے۔ ڈیٹا کو بہت سے مختلف طریقوں سے محفوظ کیا جا سکتا ہے۔ اب تک ہم نے صرف ArrayList کلاس کا مطالعہ کیا ہے ، جہاں ڈیٹا کو ایک صف میں محفوظ کیا جاتا ہے۔ باقی مجموعوں سے ہم بعد میں واقف ہوں گے۔ اب یہ سمجھنے کے لیے کافی ہے کہ کلیکشن کلاس کو نہ صرف ArrayList کے ساتھ بلکہ جاوا میں دیگر اقسام کے مجموعوں کے ساتھ بھی کام کرنے کے لیے ڈیزائن کیا گیا ہے (اس لیے، حقیقت میں، اس کا نام)۔ تو، ArrayList کے ساتھ کام کرتے وقت Collections کلاس آپ کو کن کاموں کو حل کرنے کی اجازت دیتی ہے؟ پہلا اور سب سے واضح چھانٹنا ہے۔ 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، وہ ہمارے لیے بہت سارے معمولات، معمولی کام کرتا ہے، جس سے ہمیں دوسری چیزوں پر توجہ مرکوز کرنے کی اجازت ملتی ہے۔ اوریکل دستاویزات میں اس کے بارے میں پڑھیں ، وہاں اور بھی طریقے ہیں۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION