اررے لسٹ ڈیٹا اسٹرکچر

پروگرامنگ کے حوالے سے ذرا یہ سچویشنز دیکھیں:

  1. اگر مجھ سے کہا جائے کہ ایک پروگرام بناؤں جس میں یوزر سے اس کے پسندیدہ پانچ رنگوں کے نام حاصل کر کے اسکرین پر دکھا دوں، تو میں یوں کروں گا کہ پانچ Variables بنا کر ان میں یوزر سے رنگوں کے نام حاصل کروں گا اور اسے اسکرین پر دکھا دوں گا۔
  2. اگر مجھ سے کہا جائے کہ ایسا پروگرام بناؤں جس میں کلاس کے پچاس اسٹوڈنٹس کے نام حاصل کر کے اسکرین پر دکھا دوں، تو میں ایک Array بناؤں گا جس کا سائز پچاس ہوگا اور اس میں اسٹوڈنٹس کے نام حاصل کر کے اسکرین پر دکھا دوں گا۔
  3. لیکن اگر مجھ سے کہا جائے کہ ایسا پروگرام بناؤں جس میں دنیا کے بڑے شہروں کے نام حاصل کر کے انہیں اسکرین پر دکھا دوں، البتہ پروگرام میں ڈیٹا انٹری شروع ہونے سے پہلے شہروں کی تعداد معلوم نہیں ہو سکتی، تو اب مجھے کیا کرنا چاہیے؟ اس لیے کہ Array بناتے وقت یہ بتانا ضروری ہے کہ اس میں کتنی ویلیوز اسٹور کی جائیں گی۔

چنانچہ Array کی اس کمی کو پورا کرنے کے لیے پروگرامنگ لینگوئجز میں ArrayList یا اس سے ملتے جلتے نام کا ڈیٹا اسٹرکچر استعمال کیا جاتا ہے جسے بناتے وقت یہ بتانا ضروری نہیں ہے کہ اس میں کتنی ویلیوز اسٹور کی جائیں گی، اس کے علاوہ اس ڈیٹا اسٹرکچر میں کچھ ایسے فنکشنز (میتھڈز) مہیا کیے جاتے ہیں جن کی مدد سے ڈیٹا پر کام کرنا آسان ہو جاتا ہے۔ مثال کے طور پر:

isEmpty()

جیسا کہ نام سے ظاہر ہے کہ اس فنکشن کی مدد سے یہ معلوم کیا جاتا ہے کہ اس وقت اررے لسٹ خالی ہے یا نہیں۔

size()

لسٹ میں کتنی ویلیوز موجود ہیں، اس فنکشن کی مدد سے معلوم کیا جاتا ہے۔

add(element)

لسٹ میں نئی ویلیو شامل کرنے کے لیے یہ فنکشن استعمال کیا جاتا ہے۔

add(index, element)

لسٹ میں کسی خاص انڈیکس والی جگہ پر ویلیو داخل کرنے کے لیے یہ فنکشن استعمال کیا جاتا ہے، جبکہ اس انڈیکس پر پہلے سے موجود ویلیو اور اس کے بعد والی ویلیوز آگے شفٹ ہو جاتی ہیں، یعنی ان کی انڈیکس ویلیو میں ایک کا اضافہ ہو جاتا ہے۔

set(index, element)

لسٹ میں کسی خاص انڈیکس پر موجود ویلیو کو تبدیل کرنے کے لیے یہ فنکشن استعمال کیا جاتا ہے۔

get(index)

لسٹ میں سے کسی خاص انڈیکس پر موجود ویلیو حاصل کرنے کے لیے یہ فنکشن استعمال کیا جاتا ہے۔

remove(index)

لسٹ میں سے کسی خاص انڈیکس پر موجود ویلیو ختم کرنے کے لیے یہ فنکشن استعمال کیا جاتا ہے۔

clear()

لسٹ میں موجود تمام ویلیوز کو ایک ہی دفعہ ختم کرنے کے لیے یہ فنکشن استعمال کیا جاتا ہے۔

اس کے علاوہ کچھ دیگر مفید فنکشنز بھی اس ڈیٹا اسٹرکچر میں دستیاب ہوتے ہیں۔ آپ دیکھ رہے ہیں کہ ArrayList ڈیٹا اسٹرکچر میں ویلیوز پر کام کرنا Array کی نسبت آسان ہے۔ البتہ روایتی طور پر اس ڈیٹا اسٹرکچر کے لیے اندرونی طور پر Array ہی استعمال کیا جاتا ہے۔ وہ اس طرح کہ جب کمپیوٹر پروگرام ایک نئی اررے لسٹ بناتا ہے تو اس کے لیے ایک اندازے کے مطابق مثلاً پچاس ویلیوز کا ایک اررے بنایا جاتا ہے۔ اگر مطلوبہ ویلیوز اس اررے میں پوری آجائیں تو ٹھیک ورنہ بڑے سائز کا ایک نیا اررے بنا کر پرانے اررے کی تمام ویلیوز اس میں منتقل کی جاتی ہیں۔ چونکہ یہ کام اندرونی طور پر ہوتا ہے اس لیے پروگرام کو تمام ویلیوز کی تعداد شروع میں بتانے کی ضرورت نہیں بلکہ وہ صرف ArrayList ڈیٹا اسٹرکچر کے فنکشنز استعمال کر کے ویلیوز کو لسٹ میں شامل یا ختم کرتا ہے۔

یہاں ایک چھوٹی سی وضاحت مناسب معلوم ہوتی ہے کہ آخر Array بناتے وقت پہلے سے اس کا سائز بتانا ضروری کیوں ہے؟ اس کے لیے پہلے کمپیوٹر میموری کا ڈھانچہ سمجھنا ضروری ہے۔ میموری دراصل سلسلہ وار خانوں پر مشتمل ہوتی ہے، ہر خانے کے دو حصے ہوتے ہیں، ایک حصے میں اس خانے کا ایڈریس ہوتا ہے جبکہ دوسرا حصہ خالی ہوتا ہے جس میں کمپیوٹر پروگرام کوئی ویلیو اسٹور کرتا ہے۔ اسی طرح اررے میں بھی ہر خانے کے دو حصے ہوتے ہیں، ایک حصہ انڈیکس اور دوسرا حصہ ویلیو پر مشتمل ہوتا ہے۔ اررے دراصل میموری کے اس ڈھانچے کو استعمال کرتا ہے، وہ اس طرح کہ مثلاً جب 20 ویلیوز کے لیے ایک اررے بنایا جاتا ہے تو میموری میں اس کے لیے 20 خانے مختص کر دیے جاتے ہیں، اور اررے کی زیرو انڈیکس کو میموری کے پہلے خانے کے ایڈریس کے ساتھ جوڑ دیا جاتا ہے۔ یعنی میموری میں اررے کی ویلیوز کے لیے تمام خانے ایک ہی جگہ اکٹھے موجود ہوتے ہیں، یوں نہیں ہوتا کہ پہلی کچھ ویلیوز کے لیے میموری کے کچھ خانے یہاں اور باقی خانے میموری میں کہیں اور ہوں، اگر ایسا ہوتا تو اس سے اررے کی کارکردگی متاثر ہوتی اور پروگرامنگ لینگوئج کو میموری کے اندر اررے کے مختلف حصوں کو ہینڈل کرنے کے لیے اضافی طور پر کافی کام کرنا پڑ جاتا۔ آپ سمجھ سکتے ہیں کہ یہ ایک طرح سے مجبوری ہے کہ میموری کے بہتر سے بہتر استعمال کی خاطر اررے بناتے وقت اس کے لیے میموری کے خانوں کو پہلے سے مختص کرنا ضروری ہے، جس کے لیے ویلیوز کی تعداد بتانا لازمی ہو جاتا ہے۔ البتہ جہاں اررے کی یہ کمی کسی کام میں رکاوٹ بن جائے تو پھر دیگر ڈیٹا اسٹرکچرز مثلاً اررے لسٹ وغیرہ استعمال کیے جاتے ہیں۔ یہاں یہ سوال شاید آپ کے ذہن میں آرہا ہو کہ Multidimensional Array میموری کے اندر کیسے اسٹور ہوتا ہے، تو وہ ایسے کہ پہلی سطر، اس کے بعد دوسری سطر، اس کے بعد تیسری اور ایسے ہی باقی سطریں اسٹور ہوتی ہیں۔ چنانچہ اررے بناتے وقت اس کا سائز بتانے کی ایک وجہ یہ بھی ہے کیونکہ جب تک پروگرامنگ لینگوئج کو اررے کی ڈائمنشنز اور ویلیوز کی تعداد معلوم نہ ہو، وہ میموری کے اندر ان سطروں کی کیلکولیشن نہیں کر سکتی۔

Categories: