JavaRush /جاوا بلاگ /Random-SD /اهي هڪ انٽرويو ۾ ڇا پڇي سگھن ٿا: جاوا ۾ ڊيٽا جي جوڙجڪ. حص...

اهي هڪ انٽرويو ۾ ڇا پڇي سگھن ٿا: جاوا ۾ ڊيٽا جي جوڙجڪ. حصو 1

گروپ ۾ شايع ٿيل
سلام! ڪو مسئلو ناهي ته توهان ان کي ڪيئن ڏسندا آهيو، توهان ڪاميابيءَ سان ٽيڪنيڪل داخلا انٽرويو پاس ڪرڻ کان سواءِ ڊولپر نٿا بڻجي سگهو. اهي هڪ انٽرويو ۾ ڇا پڇي سگھن ٿا: جاوا ۾ ڊيٽا جي جوڙجڪ - 1جاوا سان لاڳاپيل ڪيتريون ئي ٽيڪنالاجيون آهن، ۽ اهو سڀ ڪجهه سکڻ ناممڪن آهي. ضابطي جي طور تي، ڪجهه مخصوص انٽرويو دوران پڇيو ويندو آهي صرف ان صورت ۾ جڏهن اهي ڊولپر ڳولي رهيا آهن سٺو تجربو رکندڙ ڪجهه فريم ورڪ ۾ پروجيڪٽ لاء اهم. جيڪڏهن ائين آهي، توهان کي مڪمل رفتار سان هن فريم ورڪ جي چوڌاري ڇڪايو ويندو، توهان کي ان بابت ڪو شڪ ناهي. ڇا اهي پڇن ٿا هڪ انٽرويو دوران: جاوا ۾ ڊيٽا جي جوڙجڪ - 2پر هاڻي اسان بنيادي بابت ڳالهائي رهيا آهيون ته هر جاوا ڊولپر کي ڄاڻڻ گهرجي. انهيءَ ڪلاسيڪل علم جي باري ۾ جنهن کان اهو سڀ شروع ٿئي ٿو. اڄ مان ڪنهن به انٽرويو جي بنيادي موضوعن مان هڪ تي رابطو ڪرڻ چاهيندس - جاوا ۾ ڊيٽا جي جوڙجڪ . تنهن ڪري، ٻڪرين جي چوڌاري مارڻ بدران، اچو ته شروع ڪريون. سوالن جي ھڪڙي فهرست ڳولھيو جيڪي توھان کان پڇيا ويندا ھن موضوع بابت انٽرويو دوران.

1. اسان کي ڊيٽا جي جوڙجڪ بابت ٿورو ٻڌايو

ڊيٽا جو ڍانچو هڪ ڊيٽا اسٽور آهي جنهن ۾ معلومات هڪ خاص طريقي سان ترتيب ڏنل آهي. اهي اڏاوتون ڪجهه خاص عملن جي موثر ڪارڪردگي لاء ٺهيل آهن. ڊيٽا جي جوڙجڪ جا عام مثال آهن:
  • صفون،
  • اسٽيڪ،
  • قطارون،
  • لاڳاپيل فهرستون،
  • گراف،
  • وڻ
  • اڳيون وڻ،
  • hash ٽيبل.
توھان انھن بابت وڌيڪ ڳولي سگھو ٿا هتي ۽ هتي . ڊيٽا هڪ پروگرام ۾ هڪ اهم جزو آهي، ۽ جوڙجڪ هن ڊيٽا کي هڪ مخصوص، واضح طور تي منظم ڪيل فارم ۾ محفوظ ڪرڻ جي اجازت ڏئي ٿو. جيڪو به توهان جي ايپليڪيشن ڪري ٿو، اهو پاسو هميشه ان ۾ موجود هوندو: جيڪڏهن اهو ويب اسٽور آهي، پوءِ پراڊڪٽس بابت معلومات محفوظ ڪئي ويندي، جيڪڏهن اهو هڪ سماجي نيٽ ورڪ آهي، صارفين ۽ فائلن بابت ڊيٽا، وغيره.

2. توهان Arrays بابت ڇا ڄاڻو ٿا؟

هڪ صف هڪ ئي قسم جي قدرن کي محفوظ ڪرڻ لاءِ هڪ ڪنٽينر آهي، جنهن جو تعداد اڳ ۾ بيان ڪيو ويو آهي. اسٽرنگ ويلز سان هڪ صف ٺاهڻ جو هڪ مثال:
String[] strArray = {"Java","is","the","best","language"};
جڏهن هڪ صف ٺاهيندي، ياداشت ان جي سڀني عناصر لاء مختص ڪئي وئي آهي: عناصر لاء وڌيڪ سيلز شروعاتي طور تي بيان ڪيا ويا آهن، وڌيڪ ميموري مختص ڪئي ويندي. جيڪڏهن هڪ خالي صف ٺاهي وئي آهي سيلز جي هڪ خاص تعداد سان، پوءِ صف جا سڀئي عنصر مقرر ڪيا ويندا ڊفالٽ ويلز. مثال طور:
int[] arr = new int[10];
تنهن ڪري، بولين قسم جي عناصرن سان گڏ هڪ صف لاءِ ، ابتدائي ( ڊفالٽ ) قدر غلط هوندا ، عددي قدرن سان صفن لاءِ - 0، چار قسم جي عناصر سان - \u0000 . ڪلاس جي قسم جي هڪ صف لاءِ (شيون) - null (خالي اسٽرنگ نه - "" پر خاص طور تي null ). اهو آهي، مٿي ڏنل مثال ۾، آر آر جي سڀني قدرن کي 0 ٿيندو جيستائين اهي سڌي طرح بيان ڪيا وڃن. مجموعن جي برعڪس، صفون متحرڪ نه آهن. هڪ دفعو هڪ مخصوص سائيز جي هڪ صف جو اعلان ڪيو ويو آهي، سائيز پاڻ کي تبديل نٿو ڪري سگهجي. هڪ نئين عنصر کي هڪ صف ۾ شامل ڪرڻ لاء، توهان کي هڪ نئين وڏي صف ٺاهڻ جي ضرورت آهي ۽ ان ۾ پراڻي هڪ کان سڀني عناصر کي نقل ڪرڻ جي ضرورت آهي (اهڙي طرح آهي ArrayList ڪم ڪري ٿو). اتي ھڪڙو نقطو آھي جيڪو سڀني کي خبر ناهي ۽ جنھن تي توھان کي چڱي طرح پڪڙي سگھجي ٿو. جاوا ۾ متغير جا ٻه قسم آهن - سادو قسم ۽ حوالن سان مڪمل ٿيل شيون. انهن مان ڪهڙيون صفون آهن؟ مثال طور، هتي:
int[] arr = new int[10];
اهو لڳي ٿو ته هر شيء سادو آهي - اهي 10 int عناصر آهن . تنهن ڪري، اسان اهو چئي سگهون ٿا ته اهو هڪ سادي قسم آهي؟ ڪا به ڳالهه ناهي ته ڪيئن آهي. جاوا ۾، arrays شيون آهن، متحرڪ طور تي ٺاهيل آهن ۽ قسم جي Object جي متغيرن کي مقرر ڪري سگهجي ٿو. Object ڪلاس جي سڀني طريقن کي هڪ صف تي سڏي سگهجي ٿو. تنهنڪري اسان به لکي سگهون ٿا:
Object arr = new int[]{7,5,4,3};
System.out.println(arr.toString());
جڏهن ڪنسول ڏانهن ٻاھر ڪڍيو وڃي ته توھان ڪجھھ حاصل ڪري سگھوٿا:
[I@4769b07b
جاوا ۾ arrays جي خاصيتن جي باري ۾ وڌيڪ پڙهو هن مضمون ۾ Java Array بابت . توهان جي ڄاڻ کي مضبوط ڪرڻ لاء، توهان هن مجموعي مان ڪيترائي مسئلا حل ڪري سگهو ٿا .

3. مجموعن جي درجه بندي جي وضاحت ڪريو

مجموعا استعمال ڪيا ويندا آهن حالتن ۾ جتي توهان کي لچڪ جي ضرورت هجي جڏهن ڊيٽا سان ڪم ڪندي. مجموعا هڪ عنصر شامل ڪري سگھن ٿا، هڪ عنصر کي هٽائي، ۽ ٻيا ڪيترائي عمل انجام ڏئي سگھن ٿا. جاوا ۾ ڪيترائي مختلف عمل آهن، ۽ اسان کي صرف موجوده صورتحال لاءِ صحيح مجموعو چونڊڻ جي ضرورت آهي. عام طور تي، جڏهن توهان ڪليڪشن انٽرفيس جو ذڪر ڪندا آهيو ، توهان کي چيو ويندو آهي ته ان جي ڪجهه عملن جي فهرست ۽ ان جو تعلق نقشي سان . خير، اچو ته معلوم ڪريو. تنهن ڪري، گڏ ڪرڻ ۽ نقشو ڊيٽا جي جوڙجڪ لاء ٻه مختلف درجه بندي آهن. ڪليڪشن جو درجو ڇا ٿو نظر اچي : ڪليڪشنڇا اهي پڇن ٿا هڪ انٽرويو دوران: جاوا ۾ ڊيٽا جي جوڙجڪ - 3 انٽرفيس بنيادي طريقن جي فهرست سان گڏ مکيه ٽاپ لنڪ آهي، جنهن مان ڊيٽا جي جوڙجڪ جا ٽي بنيادي قسم نڪرندا آهن - سيٽ ، لسٽ ، قطار . 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 ۾ String عناصر استعمال ڪندا آهيون ، انهن کي ترتيب ڏنو ويندو، پر الفابيٽ سان. چڱو، جيڪڏهن اسان وٽ ڪجهه معياري (ڪسٽم) ڪلاس آهي؟ هن طبقي جون شيون 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 کي خبر ناهي ته هن قسم جي شين کي ڪيئن ترتيب ڏيو. انهي صورت ۾، اسان کي ضرورت آهي اسان جي ڪسٽم اعتراض کي لاڳو ڪرڻ لاء Comparable انٽرفيس ۽ ان جي 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 صحيح ڪم ڪندو ۽ نتيجو ڏيکاريندو:
[ٻلي{عمر=2، نالو='برسڪ'}، ٻلي{عمر=3، نالو='گارفيلڊ'}، ٻلي{عمر=4، نالو='مرزڪ'}]
ٻيو طريقو اهو آهي ته هڪ الڳ ترتيب ڏيڻ وارو ڪلاس ٺاهيو وڃي جيڪو 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 class استعمال ڪندي ترتيب ڏنيون وينديون . توھان ھن مضمون مان جاوا ۾ Comparator ۽ Comparable بابت وڌيڪ سکي سگھو ٿا .

5. اسان کي قطار بابت ٻڌايو

قطار هڪ انٽرفيس آهي جيڪو انهن اڏاوتن لاءِ ذميوار آهي جيڪي هڪ قطار جي طور تي منظم ٿيل آهن - هڪ ڊيٽا جو ڍانچو جيڪو عناصر کي ترتيب سان محفوظ ڪري ٿو. مثال طور، ماڻهن جي قطار مان، پهريون ماڻهو داخل ٿيندو جيڪو ٻين کان اڳ پهتو، ۽ آخري اهو هوندو جيڪو سڀني کان دير سان پهتو. هن طريقي کي FIFO سڏيو ويندو آهي ، يعني فرسٽ ان فرسٽ آئوٽ . منفرد قطار جا طريقا پهرين يا آخري عنصر سان ڪم ڪرڻ تي ڌيان ڏين ٿا، مثال طور:
  • شامل ڪريو ۽ پيش ڪريو - قطار جي آخر ۾ ھڪڙو عنصر داخل ڪري ٿو،
  • هٽايو - ٻيهر حاصل ڪري ٿو ۽ هن قطار جي هيڊر کي هٽائي ٿو،
  • peek - ٻيهر حاصل ڪري ٿو پر قطار جي هيڊر کي نه هٽائي ٿو.
حصو 2
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION