JavaRush /جاوا بلاگ /Random-UR /وہ انٹرویو میں کیا پوچھ سکتے ہیں: جاوا میں ڈیٹا ڈھانچے حص...

وہ انٹرویو میں کیا پوچھ سکتے ہیں: جاوا میں ڈیٹا ڈھانچے حصہ 1

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

1. ہمیں ڈیٹا ڈھانچے کے بارے میں تھوڑا سا بتائیں

ڈیٹا ڈھانچہ ایک ڈیٹا اسٹور ہوتا ہے جس میں معلومات کو ایک خاص طریقے سے ترتیب دیا جاتا ہے۔ یہ ڈھانچے مخصوص آپریشنز کی موثر کارکردگی کے لیے بنائے گئے ہیں۔ ڈیٹا ڈھانچے کی عام مثالیں ہیں:
  • صفیں
  • ڈھیر،
  • قطاریں
  • متعلقہ فہرستیں،
  • گراف،
  • درخت
  • سابقہ ​​درخت،
  • ہیش ٹیبل.
آپ یہاں اور یہاں ان کے بارے میں مزید جان سکتے ہیں ۔ ڈیٹا کسی پروگرام میں کلیدی جزو ہوتا ہے، اور ڈھانچے اس ڈیٹا کو ایک مخصوص، واضح طور پر ساختی شکل میں ذخیرہ کرنے کی اجازت دیتے ہیں۔ آپ کی ایپلی کیشن جو بھی کرے، اس میں یہ پہلو ہمیشہ موجود رہے گا: اگر یہ ویب اسٹور ہے، تو پروڈکٹس کے بارے میں معلومات محفوظ کی جائیں گی، اگر یہ سوشل نیٹ ورک ہے، صارفین اور فائلوں کے بارے میں ڈیٹا، وغیرہ۔

2. آپ Arrays کے بارے میں کیا جانتے ہیں؟

ایک صف ایک ہی قسم کی اقدار کو ذخیرہ کرنے کے لیے ایک کنٹینر ہے، جس کی تعداد پہلے سے بتائی گئی ہے۔ سٹرنگ اقدار کے ساتھ ایک صف بنانے کی ایک مثال:
String[] strArray = {"Java","is","the","best","language"};
ایک صف بناتے وقت، میموری کو اس کے تمام عناصر کے لیے مختص کیا جاتا ہے: عناصر کے لیے جتنے زیادہ خلیے ابتدائی طور پر بیان کیے جائیں گے، اتنی ہی زیادہ میموری مختص کی جائے گی۔ اگر خلیات کی ایک مخصوص تعداد کے ساتھ ایک خالی صف بنائی جاتی ہے، تو صف کے تمام عناصر کو پہلے سے طے شدہ قدریں تفویض کی جائیں گی۔ مثال کے طور پر:
int[] arr = new int[10];
لہذا، بولین قسم کے عناصر کے ساتھ ایک صف کے لیے، ابتدائی ( ڈیفالٹ ) اقدار غلط ہوں گی ، عددی قدروں والی صفوں کے لیے - 0، چار قسم کے عناصر کے ساتھ - \u0000 ۔ کلاس قسم (آبجیکٹ) کی ایک صف کے لیے - null (خالی تار نہیں - "" لیکن خاص طور پر null )۔ یعنی، اوپر کی مثال میں، arr array کی تمام اقدار 0 ہوں گی جب تک کہ وہ براہ راست متعین نہ ہوں۔ مجموعوں کے برعکس، صفیں متحرک نہیں ہیں۔ ایک بار جب کسی مخصوص سائز کی صف کا اعلان کر دیا جاتا ہے، تو سائز خود کو تبدیل نہیں کیا جا سکتا۔ ایک صف میں ایک نیا عنصر شامل کرنے کے لیے، آپ کو ایک نئی بڑی صف بنانے کی ضرورت ہے اور پرانے سے تمام عناصر کو اس میں کاپی کرنا ہوگا (اس طرح ArrayList کام کرتا ہے)۔ ایک نکتہ ہے جو ہر کوئی نہیں جانتا اور جس پر آپ کافی اچھی طرح پکڑے جا سکتے ہیں۔ جاوا میں متغیرات کی دو قسمیں ہیں - سادہ اقسام اور مکمل اشیاء کے حوالے ۔ ان میں سے کون سی صفیں ہیں؟ مثال کے طور پر، یہاں:
int[] arr = new int[10];
ایسا لگتا ہے کہ سب کچھ آسان ہے - یہ 10 int عناصر ہیں ۔ تو، ہم کہہ سکتے ہیں کہ یہ ایک سادہ قسم ہے؟ چاہے وہ کیسا ہی کیوں نہ ہو۔ جاوا میں، arrays آبجیکٹ ہیں، متحرک طور پر بنائے جاتے ہیں اور قسم کے آبجیکٹ کے متغیرات کو تفویض کیا جا سکتا ہے۔ آبجیکٹ کلاس کے تمام طریقوں کو ایک صف پر بلایا جاسکتا ہے۔ تو ہم یہاں تک لکھ سکتے ہیں:
Object arr = new int[]{7,5,4,3};
System.out.println(arr.toString());
کنسول پر آؤٹ پٹ کرتے وقت آپ کو کچھ ایسا مل سکتا ہے:
[I@4769b07b
Java Array کے بارے میں اس مضمون میں جاوا میں arrays کی خصوصیات کے بارے میں مزید پڑھیں ۔ اپنے علم کو مستحکم کرنے کے لیے، آپ اس مجموعہ سے کئی مسائل حل کر سکتے ہیں ۔

3. مجموعوں کے درجہ بندی کی وضاحت کریں۔

مجموعے کا استعمال ان حالات میں کیا جاتا ہے جہاں ڈیٹا کے ساتھ کام کرتے وقت آپ کو لچک کی ضرورت ہوتی ہے۔ مجموعے ایک عنصر کو شامل کرسکتے ہیں، ایک عنصر کو ہٹا سکتے ہیں، اور بہت سے دوسرے کام انجام دے سکتے ہیں۔ جاوا میں بہت سے مختلف نفاذ ہیں، اور ہمیں صرف موجودہ صورتحال کے لیے صحیح مجموعہ کا انتخاب کرنے کی ضرورت ہے۔ عام طور پر، جب آپ کلیکشن انٹرفیس کا تذکرہ کرتے ہیں ، تو آپ سے اس کے کچھ نفاذ اور نقشہ کے ساتھ اس کے تعلق کو درج کرنے کے لیے کہا جاتا ہے ۔ اچھا، آئیے معلوم کرتے ہیں۔ لہذا، مجموعہ اور نقشہ ڈیٹا ڈھانچے کے لئے دو مختلف درجہ بندی ہیں۔ مجموعہ کا درجہ بندی کیسی دکھتی ہے : مجموعہوہ انٹرویو کے دوران کیا پوچھ سکتے ہیں: جاوا میں ڈیٹا سٹرکچرز - 3 انٹرفیس بنیادی طریقوں کی فہرست کے ساتھ کلیدی ٹاپ لنک ہے، جس سے ڈیٹا ڈھانچے کی تین بنیادی اقسام پیدا ہوتی ہیں - Set , List , Queue ۔ Set<T> ایک انٹرفیس ہے جو اشیاء کے مجموعہ کی نمائندگی کرتا ہے جس میں ہر چیز منفرد ہوتی ہے۔ List<T> ایک انٹرفیس ہے جو اشیاء کی ترتیب شدہ ترتیب کی نمائندگی کرتا ہے جسے فہرست کہتے ہیں۔ قطار<T> ایک انٹرفیس ہے جو ڈھانچے کے لئے ذمہ دار ہے جو ایک قطار کے طور پر منظم ہوتے ہیں (عناصر کا ترتیب وار ذخیرہ)۔ جیسا کہ پہلے ذکر کیا گیا ہے، نقشہ ایک الگ درجہ بندی ہے: Map<K, V> ایک انٹرفیس ہے جو ایک لغت کی نمائندگی کرتا ہے جس میں عناصر کلیدی قدر کے جوڑے کے طور پر موجود ہوتے ہیں۔ مزید یہ کہ تمام کلیدیں (K) نقشہ آبجیکٹ کے اندر منفرد ہیں ۔ اس قسم کا مجموعہ کسی عنصر کو تلاش کرنا آسان بناتا ہے اگر ہمیں کلید یعنی آبجیکٹ کا منفرد شناخت کنندہ معلوم ہو۔وہ انٹرویو کے دوران کیا پوچھ سکتے ہیں: جاوا میں ڈیٹا سٹرکچرز - 4

4. آپ سیٹ کے بارے میں کیا جانتے ہیں؟

جیسا کہ پہلے کہا گیا ہے، اس مجموعہ میں بہت سے منفرد عناصر شامل ہیں۔ دوسرے الفاظ میں، ایک ہی چیز جاوا سیٹ میں ایک سے زیادہ بار ظاہر نہیں ہو سکتی۔ میں یہ بھی بتانا چاہوں گا کہ ہم نمبر (انڈیکس) کے ذریعہ سیٹ سے عنصر نہیں نکال سکتے ہیں - صرف طاقت کے ذریعہ۔ اہم بات یہ ہے کہ مختلف سیٹ کے نفاذ میں ڈیٹا کی ساخت کے مختلف طریقے ہوتے ہیں۔ ہم مخصوص نفاذ پر مزید غور کریں گے۔ لہذا، Set : HashSet کے بنیادی نفاذ ایک سیٹ ہے جو ایک ہیش ٹیبل پر مبنی ہے، جس کے نتیجے میں تلاش میں مدد ملتی ہے۔ ایک ہیش فنکشن استعمال کرتا ہے جو تلاش اور اندراج کے دوران کارکردگی کو بہتر بناتا ہے۔ عناصر کی تعداد سے قطع نظر، عام طور پر، اندراج اور تلاش (کبھی کبھی حذف کرنا) مسلسل وقت کے قریب انجام دیا جاتا ہے - O(1)۔ ہم تھوڑی دیر بعد مزید تفصیل سے ہیش فنکشن کو دیکھیں گے۔ میں یہ بھی نوٹ کرنا چاہوں گا کہ HashSet پر مشتمل ہے HashMap ، جہاں تمام جادو ہوتا ہے۔ یہاں جاوا میں HashSet کے بارے میں ایک تفصیلی مضمون ہے ۔ LinkedHashSet - یہ کلاس بغیر کوئی نیا طریقہ شامل کیے HashSet کو بڑھاتی ہے۔ LinkedList کی طرح ، یہ کلاس سیٹ کے عناصر کی اس ترتیب سے منسلک فہرست کو برقرار رکھتی ہے جس میں وہ داخل کیے گئے تھے۔ یہ آپ کو دیے گئے سیٹ کے نفاذ میں ضروری ترتیب کو منظم کرنے کی اجازت دیتا ہے ۔ TreeSet کلاس ایک سیٹ بناتی ہے جو کہ عناصر کو ذخیرہ کرنے کے ڈھانچے کو منظم کرنے کے لیے سرخ سیاہ درخت پر مبنی ہے۔ دوسرے الفاظ میں، ایک دیئے گئے سیٹ میں ہم عناصر کو صعودی ترتیب میں ترتیب دے سکتے ہیں۔ اگر ہم "باکس" سے کچھ معیاری اشیاء استعمال کرتے ہیں، مثال کے طور پر، Integer ، تو ہمیں انٹیجرز کے سیٹ کو صعودی ترتیب میں ترتیب دینے کے لیے کچھ کرنے کی ضرورت نہیں ہے:
TreeSet set = new TreeSet<>();
set.add(4);
set.add(2);
set.add(3);
set.add(1);

System.out.println(set);
اور کنسول میں ہمیں آؤٹ پٹ ملے گا:
[1، 2، 3، 4]
یعنی اس سیٹ میں نمبرز کو ترتیب شدہ شکل میں محفوظ کیا جاتا ہے۔ اگر ہم سٹرینگ عناصر کو TreeSet میں استعمال کرتے ہیں ، تو انہیں ترتیب دیا جائے گا، لیکن حروف تہجی کے لحاظ سے۔ ٹھیک ہے، اگر ہمارے پاس کچھ معیاری (اپنی مرضی کے مطابق) کلاس ہے؟ اس کلاس کی اشیاء TreeSet کی ساخت کیسے بنائیں گی ؟ اگر ہم اس سیٹ کو ایک صوابدیدی اعتراض تفویض کرنے کی کوشش کرتے ہیں :
TreeSet set = new TreeSet<>();
set.add(new Cat(4, "Murzik"));
set.add(new Cat(2, "Barsik"));
set.add(new Cat(3, "Гарфилд"));

System.out.println(set);
ہمیں ClassCastException موصول ہوگا کیونکہ TreeSet نہیں جانتا کہ اس قسم کی اشیاء کو کیسے ترتیب دیا جائے۔ اس صورت میں، موازنہ انٹرفیس اور اس کے compareTo طریقہ کو نافذ کرنے کے لیے ہمیں اپنی مرضی کے مطابق آبجیکٹ کی ضرورت ہے :
public class Cat implements Comparable {
    int age;
    String name;

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

   @Override
   public int compareTo(Cat cat) {
       return age > cat.age ? 1 : -1;
   }

   @Override
   public String toString() {
       return "Cat{" +
               "age=" + age +
               ", name='" + name + '\'' +
               '}';
   }
}
جیسا کہ آپ نے دیکھا، compareTo طریقہ ایک int واپس کرتا ہے :
  • 1 اگر موجودہ (اس) شے کو بڑا سمجھا جائے؛
  • -1 اگر موجودہ اعتراض کو دلیل کے طور پر آنے والے اعتراض سے چھوٹا سمجھا جاتا ہے۔
  • 0 اگر اشیاء برابر ہیں (ہم اسے اس معاملے میں استعمال نہیں کرتے ہیں)۔
اس صورت میں، ہمارا TreeSet صحیح طریقے سے کام کرے گا اور نتیجہ ظاہر کرے گا:
[Cat{age=2, name='Barsik'}, Cat{age=3, name='Garfield'}, Cat{age=4, name='Murzik'}]
دوسرا طریقہ یہ ہے کہ الگ الگ ترتیب دینے والی کلاس بنائی جائے جو comparator انٹرفیس اور اس کے موازنہ کے طریقہ کار کو نافذ کرتی ہے :
public class CatComparator implements Comparator {

   @Override
   public int compare(Cat o1, Cat o2) {
       return o1.age > o2.age ? 1 : -1;
   }
}
اس صورت میں، اسے استعمال کرنے کے لیے، ہمیں اس کلاس کا ایک آبجیکٹ TreeSet کنسٹرکٹر پر سیٹ کرنا ہوگا :
TreeSet set = new TreeSet<>(new CatComparator());
اس کے بعد، کیٹ کلاس کی تمام اشیاء جو TreeSet میں شامل ہیں Cat Comparator کلاس کا استعمال کرتے ہوئے ترتیب دی جائیں گی ۔ آپ اس مضمون سے جاوا میں Comparator اور Comparable کے بارے میں مزید جان سکتے ہیں ۔

5. ہمیں قطار کے بارے میں بتائیں

قطار ایک ایسا انٹرفیس ہے جو ان ڈھانچوں کے لیے ذمہ دار ہے جو قطار کے طور پر منظم ہوتے ہیں - ایک ڈیٹا ڈھانچہ جو عناصر کو ترتیب وار ذخیرہ کرتا ہے۔ مثال کے طور پر، لوگوں کی قطار میں سے، سب سے پہلے داخل ہونے والا وہ ہو گا جو دوسروں سے پہلے پہنچے، اور آخری وہ ہو گا جو باقی سب سے زیادہ دیر میں پہنچے۔ اس طریقہ کو FIFO کہا جاتا ہے ، یعنی First in First Out ۔ منفرد قطار کے طریقے پہلے یا آخری عنصر کے ساتھ کام کرنے پر توجہ مرکوز کرتے ہیں، مثال کے طور پر:
  • شامل کریں اور پیش کریں - قطار کے آخر میں ایک عنصر داخل کریں،
  • ہٹانا - اس قطار کے ہیڈر کو بازیافت اور ہٹاتا ہے،
  • peek - بازیافت کرتا ہے لیکن قطار ہیڈر کو نہیں ہٹاتا ہے۔
حصہ 2
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION