CodeGym /جاوا بلاگ /Random-UR /جاوا اری لسٹ
John Squirrels
سطح
San Francisco

جاوا اری لسٹ

گروپ میں شائع ہوا۔
ہائے! پچھلے اسباق میں، ہم نے صفوں میں گہرا غوطہ لگایا اور صفوں کے ساتھ کام کرنے کی عام مثالوں کا جائزہ لیا۔ اس سبق میں، ہم Java ArrayList پر ایک قریبی جائزہ لیں گے۔ عام طور پر، صفیں بہت آسان ہیں۔ اور، جیسا کہ آپ نے پہلے ہی دیکھا ہے، آپ ان کے ساتھ بہت کچھ کر سکتے ہیں :) لیکن arrays میں بہت سی کوتاہیاں ہوتی ہیں۔
  • محدود سائز۔ آپ کو یہ جاننے کی ضرورت ہے کہ جب آپ اسے بناتے ہیں تو آپ کی صف میں کتنے عناصر کی ضرورت ہوتی ہے۔ اگر آپ کم سمجھتے ہیں، تو آپ کے پاس کافی جگہ نہیں ہوگی۔ حد سے زیادہ اندازہ لگائیں، اور صف آدھی خالی رہے گی، جو بھی خراب ہے۔ بہر حال، آپ اب بھی ضرورت سے زیادہ میموری مختص کر رہے ہیں۔

  • ایک صف میں عناصر کو شامل کرنے کے طریقے نہیں ہوتے ہیں۔ آپ کو ہمیشہ واضح طور پر اس پوزیشن کے انڈیکس کی نشاندہی کرنی چاہیے جہاں آپ عنصر شامل کرنا چاہتے ہیں۔ اگر آپ غلطی سے کسی ایسی پوزیشن کے لیے انڈیکس کو متعین کرتے ہیں جس کی آپ کو ضرورت ہے، تو اسے اوور رائٹ کر دیا جائے گا۔

  • کسی آئٹم کو حذف کرنے کا کوئی طریقہ نہیں ہے۔ ایک قدر کو صرف "صفر آؤٹ" کیا جا سکتا ہے۔
public class Cat {

   private String name;

   public Cat(String name) {
       this.name = name;
   }

   public static void main(String[] args) {

       Cat[] cats = new Cat[3];
       cats[0] = new Cat("Thomas");
       cats[1] = new Cat("Behemoth");
       cats[2] = new Cat("Lionel Messi");

       cats[1] = null;



       System.out.println(Arrays.toString(cats));
   }

   @Override
   public String toString() {
       return "Cat{" +
               "name='" + name + '\'' +
               '}';
   }
}
آؤٹ پٹ: [Cat{name='Thomas'}, null, Cat{name='Lionel Messi'}] خوش قسمتی سے، جاوا کے تخلیق کار صفوں کے فوائد اور نقصانات سے بخوبی واقف ہیں، اور اسی وجہ سے Java ArrayList نامی ایک بہت ہی دلچسپ ڈیٹا ڈھانچہ بنایا ہے ۔ جتنا آسان ہو سکے بولیں، جاوا اری لسٹ ایک "سوپ اپ" صف ہے جس میں بہت ساری نئی خصوصیات ہیں۔

اری لسٹ کیسے بنائیں

یہ بنانا بہت آسان ہے:
ArrayList<Cat> cats = new ArrayList<Cat>();
اب ہم نے Cat اشیاء کو ذخیرہ کرنے کے لیے ایک فہرست بنائی ہے۔ نوٹ کریں کہ ہم ArrayList کے سائز کی وضاحت نہیں کر رہے ہیں ، کیونکہ یہ خود بخود پھیل سکتا ہے۔ یہ کیسے ممکن ہے؟ یہ بہت آسان ہے، اصل میں. یہ آپ کو حیران کر سکتا ہے، لیکن جاوا میں ArrayList ایک بہت ہی عام صف کے اوپر بنائی گئی ہے :) جی ہاں، اس میں ایک صف ہے، اور اسی جگہ ہمارے عناصر محفوظ ہیں۔ لیکن جاوا میں ArrayList کے پاس اس صف کے ساتھ کام کرنے کا ایک خاص طریقہ ہے۔
  • جب اندرونی صف بھر جاتی ہے، ArrayList اندرونی طور پر ایک نئی صف بناتی ہے۔ نئی صف کا سائز پرانی صف کے اوقات 1.5 جمع 1 کا سائز ہے۔

  • تمام ڈیٹا کو پرانی صف سے نئے میں کاپی کیا جاتا ہے۔

  • پرانی صف کو کچرا جمع کرنے والے کے ذریعہ صاف کیا جاتا ہے۔
یہ طریقہ کار Java ArrayList (ایک عام صف کے برعکس) کو نئے عناصر کو شامل کرنے کے طریقہ کار کو نافذ کرنے کی اجازت دیتا ہے۔ یہ add()طریقہ ہے۔
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<Cat>();
   cats.add(new Cat("Behemoth"));
}
فہرست کے آخر میں نئی ​​اشیاء شامل کی جاتی ہیں۔ اب سرنی کو چھلکنے کا کوئی خطرہ نہیں ہے، لہذا یہ طریقہ مکمل طور پر محفوظ ہے۔ ویسے، ArrayList کسی چیز کو نہ صرف اس کے انڈیکس سے ڈھونڈ سکتا ہے، بلکہ اس کے برعکس بھی: یہ ArrayList میں کسی آبجیکٹ کا انڈیکس تلاش کرنے کے لیے حوالہ استعمال کر سکتا ہے ! indexOf() طریقہ اس کے لیے ہے: ہم جس چیز کو چاہتے ہیں اس کا حوالہ دیتے ہیں، اور indexOf() اپنا انڈیکس لوٹاتا ہے:
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();
   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Behemoth");
   Cat lionel = new Cat("Lionel Messi");
   Cat fluffy = new Cat ("Fluffy");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(lionel);
   cats.add(fluffy);

   int thomasIndex = cats.indexOf(thomas);
   System.out.println(thomasIndex);
}
آؤٹ پٹ: 0 یہ ٹھیک ہے۔ ہمارا تھامس آبجیکٹ درحقیقت عنصر 0 میں محفوظ ہے۔ Arrays میں صرف خرابیاں نہیں ہیں۔ ان میں بلا شبہ فوائد بھی ہیں۔ ان میں سے ایک انڈیکس کے ذریعہ عناصر کو تلاش کرنے کی صلاحیت ہے۔ کیونکہ ہم ایک انڈیکس کی طرف اشارہ کرتے ہیں، یعنی کسی مخصوص میموری ایڈریس کی طرف، اس طرح سے کسی صف کو تلاش کرنا بہت جلد ہوتا ہے۔ ArrayListجانتا ہے کہ اسے کیسے کرنا ہے! get () طریقہ اس کو نافذ کرتا ہے:
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();
   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Behemoth");
   Cat lionel = new Cat("Lionel Messi");
   Cat fluffy = new Cat ("Fluffy");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(lionel);
   cats.add(fluffy);

   Cat secondCat = cats.get(1);

   System.out.println(secondCat);
}
آؤٹ پٹ: Cat{name='Behemoth'} اس کے علاوہ، آپ آسانی سے یہ جان سکتے ہیں کہ آیا ArrayList میں کوئی خاص چیز شامل ہے۔ یہ ArrayList contains() طریقہ استعمال کرتے ہوئے کیا جاتا ہے:
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();
   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Behemoth");
   Cat lionel = new Cat("Lionel Messi");
   Cat fluffy = new Cat ("Fluffy");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(lionel);
   cats.add(fluffy);

   cats.remove(fluffy);
   System.out.println(cats.contains(fluffy));
}
طریقہ چیک کرتا ہے کہ آیا ArrayList کی اندرونی صف میں عنصر شامل ہے، اور ایک بولین (سچ یا غلط) لوٹاتا ہے۔ آؤٹ پٹ: غلط اور اندراج کے بارے میں ایک اور اہم چیز۔ ArrayList آپ کو نہ صرف صف کے آخر میں بلکہ کہیں بھی عناصر داخل کرنے کے لیے ایک انڈیکس استعمال کرنے دیتی ہے۔ اس کے لیے دو طریقے ہیں:
  • ArrayList add(int index, Cat element)
  • اری لسٹ سیٹ (انٹ انڈیکس، بلی عنصر)
دلائل کے طور پر، یہ دونوں طریقے اس پوزیشن کا اشاریہ لیتے ہیں جہاں آپ داخل کرنا چاہتے ہیں، اور خود آبجیکٹ کا حوالہ دیتے ہیں۔ فرق یہ ہے کہ سیٹ() کا استعمال کرتے ہوئے داخل کرنا پرانی قدر کو اوور رائٹ کر دیتا ہے۔ add() کا استعمال کرتے ہوئے داخل کرنے سے پہلے تمام عناصر [index] سے صف کے آخر تک شفٹ ہو جاتے ہیں، اور پھر اس کے نتیجے میں خالی جگہ میں مخصوص آبجیکٹ کو شامل کر دیتے ہیں۔

یہاں ایک مثال ہے:

public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();
   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Behemoth");
   Cat lionel = new Cat("Lionel Messi");
   Cat fluffy = new Cat ("Fluffy");

   cats.add(thomas);
   cats.add(behemoth);

   System.out.println(cats.toString());

   cats.set(0, lionel);// Now we have a list of 2 cats. Adding a 3rd using set

   System.out.println(cats.toString());
}
آؤٹ پٹ: [[Cat{name='Thomas'}, Cat{name='Behemoth'}] [Cat{name='Lionel Messi'}, Cat{name='Behemoth'}] ہمارے پاس 2 بلیوں کی فہرست تھی ۔ پھر ہم نے سیٹ() طریقہ استعمال کرتے ہوئے عنصر 0 کے بطور ایک اور داخل کیا ۔ نتیجے کے طور پر، پرانے عنصر کو ایک نئے سے تبدیل کر دیا گیا ہے۔
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();
   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Behemoth");
   Cat lionel = new Cat("Lionel Messi");
   Cat fluffy = new Cat ("Fluffy");

   cats.add(thomas);
   cats.add(behemoth);

   System.out.println(cats.toString());

   cats.add(0, lionel);// Now we have a list of 2 cats. Adding a 3rd using add

   System.out.println(cats.toString());
}
اور یہاں ہم دیکھتے ہیں کہ add() مختلف طریقے سے کام کرتا ہے۔ یہ تمام عناصر کو دائیں طرف لے جاتا ہے اور پھر عنصر 0 کے بطور نئی قدر لکھتا ہے۔ آؤٹ پٹ: [Cat{name='Thomas'}, Cat{name='Behemoth'}] [Cat{name='Lionel Messi'}, Cat{name='Thomas'}, Cat{name='Behemoth'}] فہرست کو مکمل طور پر صاف کرنے کے لیے، ہم clear() طریقہ استعمال کرتے ہیں:
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();
   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Behemoth");
   Cat lionel = new Cat("Lionel Messi");
   Cat fluffy = new Cat ("Fluffy");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(lionel);
   cats.add(fluffy);

   cats.clear();

   System.out.println(cats.toString());
}
آؤٹ پٹ: [] فہرست سے سب کچھ ہٹا دیا گیا تھا۔ ویسے، براہ کرم نوٹ کریں: arrays کے برعکس، ArrayList toString() طریقہ کو اوور رائیڈ کرتا ہے اور فہرست کو پہلے ہی سٹرنگ کے طور پر مناسب طریقے سے دکھاتا ہے۔ عام arrays کے ساتھ، ہمیں اس کے لیے Arrays کلاس کا استعمال کرنا پڑا ۔ اور چونکہ میں نے Arrays کا ذکر کیا ہے : Java آپ کو ایک array اور ArrayList کے درمیان آسانی سے "سوئچ" کرنے دیتا ہے ، یعنی ایک دوسرے میں تبدیل۔ Arrays کلاس میں اس کے لیے Arrays.asList() طریقہ ہے۔ ہم مواد کو ایک صف کے طور پر حاصل کرنے اور انہیں اپنے ArrayList کنسٹرکٹر کو منتقل کرنے کے لیے استعمال کرتے ہیں:
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();


   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Behemoth");
   Cat lionel = new Cat("Lionel Messi");
   Cat fluffy = new Cat ("Fluffy");

   Cat[] catsArray = {thomas, behemoth, lionel, fluffy};

   ArrayList<Cat> catsList = new ArrayList<>(Arrays.asList(catsArray));
   System.out.println(catsList);
}
آؤٹ پٹ: [Cat{name='Thomas'}, Cat{name='Behemoth'}, Cat{name='Lionel Messi'}, Cat{name='Fluffy'}] آپ مخالف سمت میں بھی جا سکتے ہیں: حاصل کریں ArrayList آبجیکٹ سے ایک صف ۔ ہم یہ toArray() طریقہ استعمال کرتے ہوئے کرتے ہیں:
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();

   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Behemoth");
   Cat lionel = new Cat("Lionel Messi");
   Cat fluffy = new Cat ("Fluffy");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(lionel);
   cats.add(fluffy);

   Cat[] catsArray = cats.toArray(new Cat[0]);

   System.out.println(Arrays.toString(catsArray));
}
نوٹ: ہم نے ایک خالی صف کو toArray() طریقہ میں پاس کیا۔ یہ کوئی غلطی نہیں ہے۔ ArrayList کلاس کے اندر ، یہ طریقہ اس طرح لاگو کیا جاتا ہے کہ خالی صف کو گزرنے سے اس کی کارکردگی بڑھ جاتی ہے۔ بس اسے مستقبل کے لیے ذہن میں رکھیں (یقیناً، آپ کچھ مخصوص سائز کی ایک صف پاس کر سکتے ہیں؛ یہ بھی کام کرے گا)۔ اوہ، سائز کے بارے میں. فہرست کا موجودہ سائز size () طریقہ استعمال کرتے ہوئے پایا جا سکتا ہے:
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>();


   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Behemoth");
   Cat lionel = new Cat("Lionel Messi");
   Cat fluffy = new Cat ("Fluffy");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(lionel);
   cats.add(fluffy);

   System.out.println(cats.size());
}
یہ سمجھنا ضروری ہے کہ ایک صف کی لمبائی کی خاصیت کے برعکس، ArrayList.size() طریقہ عناصر کی اصل تعداد لوٹاتا ہے، اصل صلاحیت نہیں۔ سب کے بعد، ہم نے ArrayList بناتے وقت سائز کی وضاحت نہیں کی ۔ تاہم، آپ اس کی وضاحت کر سکتے ہیں — ArrayList میں ایک مناسب کنسٹرکٹر ہے۔ لیکن نئے عناصر کو شامل کرنے کے معاملے میں، یہ اس کے طرز عمل کو تبدیل نہیں کرتا ہے:
public static void main(String[] args) {

   ArrayList<Cat> cats = new ArrayList<>(2);// create an ArrayList with an initial capacity of 2


   Cat thomas = new Cat("Thomas");
   Cat behemoth = new Cat("Behemoth");
   Cat lionel = new Cat("Lionel Messi");
   Cat fluffy = new Cat ("Fluffy");

   cats.add(thomas);
   cats.add(behemoth);
   cats.add(lionel);
   cats.add(fluffy);

   System.out.println(cats.size());
}
کنسول آؤٹ پٹ: 4 ہم نے 2 عناصر کی ایک فہرست بنائی ہے، لیکن جب ہمیں اس کی ضرورت پڑی تو اسے خاموشی سے بڑھا دیا گیا۔ ایک اور غور یہ ہے کہ اگر ہم ابتدائی طور پر ایک بہت چھوٹی فہرست بناتے ہیں، تو اسے زیادہ کثرت سے پھیلانا پڑے گا، جس میں کچھ وسائل استعمال ہوں گے۔ ہم نے اس سبق میں ایک ArrayList سے عناصر کو ہٹانے کے عمل کو مشکل سے چھوا ہے ، یقیناً، ایسا اس لیے نہیں ہے کہ اس سے ہمارا دماغ پھسل گیا۔ ہم نے اس موضوع کو ایک الگ سبق میں ڈال دیا ہے جس سے آپ بعد میں ملیں گے :) جو کچھ آپ نے سیکھا اسے تقویت دینے کے لیے، ہمارا مشورہ ہے کہ آپ ہمارے جاوا کورس سے ایک ویڈیو سبق دیکھیں۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION