ماڈیول اسباق (2/2)
مجموعے اور اری لسٹ
جاوا میں روایتی صفوں میں تخلیق کے وقت ایک مقررہ سائز کی وضاحت کی گئی ہے۔ ڈیٹا کی فہرستوں کے ساتھ کام کرنے کے لیے جن کا سائز متحرک طور پر مختلف ہو سکتا ہے، جاوا جاوا کلیکشن فریم ورک فراہم کرتا ہے۔ سب سے زیادہ استعمال ہونے والی کلاس ArrayList ہے۔
ArrayList کلاس اور جنرکس
ArrayList میموری میں سائز تبدیل کرنے کے قابل صف کو لاگو کرتا ہے۔ ArrayList کا اعلان کرنے کے لیے، ہمیں اسے زاویہ بریکٹ < > میں بند کرکے اس میں عناصر کی قسم کی وضاحت کرنی ہوگی۔ اس خصوصیت کو Generics کہا جاتا ہے۔
ArrayList استعمال کرنے کے لیے، ہمیں اسے فائل کے شروع میں java.util.ArrayList سے درآمد کرنا ہوگا۔
اعلان اور انسٹی ٹیوشن:
import java.util.ArrayList;
ArrayList<String> shoppingList = new ArrayList<>();بنیادی طریقے
یہاں ایک ArrayList پر بنیادی کارروائیاں ہیں:
add(element): فہرست کے آخر میں ایک عنصر شامل کرتا ہے۔get(index): عنصر کو مخصوص انڈیکس (0-انڈیکسڈ) پر لوٹاتا ہے۔size(): فہرست میں موجود عناصر کی تعداد لوٹاتا ہے۔remove(index): مخصوص انڈیکس سے عنصر کو ہٹاتا ہے۔
shoppingList.add("Pane");
shoppingList.add("Latte");
System.out.println("Elementi: " + shoppingList.size()); // Prints 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Prints "Pane"ایک فہرست پر تکرار کرنا (ہر ایک کے لیے)
ہر ایک کے لیے لوپ ایک مجموعہ کے تمام عناصر کے ذریعے اعادہ کرنے کے لیے مثالی ڈھانچہ ہے:
for (String item : shoppingList) {
System.out.println(item);
}ارے بمقابلہ اری لسٹ: میموری اور کارکردگی
اگرچہ ArrayList ایک جامد صف سے کہیں زیادہ لچکدار ہے، لیکن یہ کارکردگی اور میموری ٹریڈ آف کے ساتھ آتا ہے:
- سٹیٹک اری: یہ میموری کے ایک متصل بلاک میں مختص ہے، اس کا سائز مقرر ہے، اور انڈیکس کے ذریعے عناصر تک رسائی انتہائی تیز ہے۔ یہ اوور ہیڈ کے بغیر براہ راست قدیم اقسام کو اسٹور کرتا ہے۔
- ArrayList: اندرونی طور پر، یہ ایک ایسی صف کا انتظام کرتا ہے جس کا سائز تبدیل کیا جاتا ہے (ایک نئی بڑی صف بنا کر اور پرانے عناصر کو کاپی کرکے) جب اس کی ابتدائی گنجائش (عام طور پر 10) سے تجاوز کر جاتی ہے۔ مزید یہ کہ، یہ صرف آبجیکٹ کے حوالہ جات کو اسٹور کرتا ہے، ہر عنصر کے لیے میموری اوور ہیڈ کو متعارف کرواتا ہے۔
آٹو باکسنگ اور ان باکسنگ
چونکہ ArrayList صرف اشیاء کو رکھ سکتا ہے، جاوا خود بخود قدیم اقسام اور ان کے متعلقہ ریپر کلاسز کے درمیان تبادلوں کو انجام دیتا ہے:
- آٹو باکسنگ: ایک قدیم قسم سے ریپر کلاس میں خودکار تبدیلی۔ مثال کے طور پر، جب آپ
numbers.add(42)لکھتے ہیں، تو جاوا خود بخود42(int) کوInteger.valueOf(42)(انٹیجر) میں تبدیل کر دیتا ہے۔ - ان باکسنگ: ایک ریپر کلاس سے ایک قدیم قسم میں خودکار تبدیلی۔ مثال کے طور پر، جب آپ
int num = numbers.get(0)پر عمل کرتے ہیں، تو جاوا اندرونی طور پرIntegerکوintمیں تبدیل کرتا ہے۔
خود ہی آزمائیں۔
ArrayList درآمد کریں، اسٹرنگ نامی ناموں کی ArrayList کا اعلان کریں۔ ایلس اور باب کو فہرست میں شامل کریں، پھر سائز() طریقہ استعمال کرکے اس کا سائز پرنٹ کریں۔
اشارہ دکھائیں۔
سب سے اوپر `import java.util.ArrayList;` شامل کریں۔ 'ArrayList<String> names = new ArrayList<>();` کے ساتھ فہرست بنائیں، عناصر کو شامل کریں، اور اس کے سائز کو `names.size()` کے ساتھ پرنٹ کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
انٹیجر نامی نمبروں کی ایک ArrayList کا اعلان کریں، نمبر 42 شامل کریں، اور get() کا استعمال کرتے ہوئے اسے انڈیکس 0 پر بازیافت کرکے پرنٹ کریں۔
اشارہ دکھائیں۔
`ArrayList<Integer> numbers = new ArrayList<>();` (انٹیجر ریپر کلاس کے ساتھ) استعمال کریں اور اسے `System.out.println(numbers.get(0));` کے ساتھ پرنٹ کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
سٹرنگ نامی رنگوں کی ایک ArrayList کا اعلان کریں۔ فہرست میں سرخ، سبز اور نیلے رنگ شامل کریں۔ آخر میں، فہرست میں اعادہ کرنے کے لیے ہر ایک لوپ کا استعمال کریں اور ہر رنگ کو اسکرین پر پرنٹ کریں۔
اشارہ دکھائیں۔
فہرست کا اعلان `ArrayList<String> colors = new ArrayList<>();` کے ساتھ کریں، تین رنگوں کو شامل کریں، اور `System.out.println(c);` کا استعمال کرتے ہوئے انہیں پرنٹ کرنے کے لیے `(String c : colors)` کے لیے ایک لوپ استعمال کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔