
مجموعو
84. اسان کي ٻڌاءِ اِيٽرٽرز بابت ۽ اُھي ڪھڙيءَ ريت استعمال ٿين ٿا
جاوا ڊولپر جي ڪنهن به انٽرويو ۾ مجموعا هڪ پسنديده موضوع آهي. جڏهن گڏ ڪرڻ واري ترتيب بابت سوالن جا جواب ڏين ٿا، اميدوار اڪثر چون ٿا ته اهو گڏ ڪرڻ واري انٽرفيس سان شروع ٿئي ٿو. پر ائين ناهي. ھڪڙو ٻيو انٽرفيس آھي ھڪڙي سطح مٿان: Iterable . هي انٽرفيس iterator() طريقو تي مشتمل آهي، جيڪو توهان کي موجوده ڪليڪشن لاءِ Iterator اعتراض تائين رسائي ڏئي ٿو. ۽ ڇا واقعي هن Iterator اعتراض آهي؟ Iterator اعتراض هڪ مجموعو ذريعي منتقل ڪرڻ جي صلاحيت فراهم ڪري ٿو ۽ ان جي عناصر تي ٻيهر ورجائي ٿو، ۽ استعمال ڪندڙ کي گڏ ڪرڻ جي مخصوص عمل درآمد جي تفصيل کي ڄاڻڻ جي ضرورت ناهي . ٻين لفظن ۾، اھو ھڪڙي قسم جو اشارو آھي مجموعي جي عناصر ڏانھن، ڄڻڪ اھو انھن مان ھڪڙي اندر اندر جھلي رھيو آھي. آئٽرٽر جا طريقا آھن جھڙوڪ:-
hasNext() — واپسي صحيح آھي جيڪڏھن iteration ۾ ڪو ٻيو عنصر ھجي (ھي طريقو توھان کي ٻڌائي ٿو ته جڏھن توھان مجموعي جي پڄاڻي تي پھچي ويا آھيو)؛
-
next() - ورجائي ۾ ايندڙ شيون واپس آڻيندو. جيڪڏهن ڪو نه آهي، ته پوء هڪ NoSuchElementException اڇلايو ويو آهي. ان جو مطلب اهو آهي ته توهان هن طريقي کي استعمال ڪرڻ کان اڳ، اهو بهترين آهي hasNext() طريقو استعمال ڪرڻ لاء يقيني بڻائڻ لاء ايندڙ عنصر موجود آهي؛
-
هٽايو () - ايندڙ () طريقو استعمال ڪندي حاصل ڪيل آخري عنصر کي گڏ ڪرڻ مان هٽائي ٿو . جيڪڏهن next() کي ڪڏهن به نه سڏيو ويو آهي، ته پوءِ ڪال ڪرڻ سان remove() هڪ غير قانوني اسٽيٽ ايڪسيپشن اڇلايو ويندو؛
-
forEachRemaining(<Consumer>) — جمع جي هر عنصر تي منظور ٿيل عمل تي عمل ڪري ٿو (اهو طريقو جاوا 8 ۾ ظاهر ٿيو).
List<String> list = new ArrayList<>();
list.add("Hello ");
list.add("World, ");
list.add("It's ");
list.add("Amigo!");
Iterator iterator = list.iterator();
while(iterator.hasNext()) {
iterator.next();
iterator.remove();
}
System.out.println(list.size());
ڪنسول ھيٺ ڏنل ڏيکاريندو:
iterator.forEachRemaining(x -> System.out.print(x));
پر هڪ دفعو اسان اهو ڪريون ٿا، ٻيهر استعمال ڪندڙ وڌيڪ استعمال لاءِ نا مناسب ٿي وڃي ٿو: اهو سڄي لسٽ کي پار ڪري چڪو آهي، ۽ هڪ عام ٽريٽر وٽ پوئتي موٽڻ لاءِ ڪو به طريقو ناهي. ۽ اهو هڪ سٺو سيگ ٺاهيندو آهي LinkedList جي بحث ۾ ، خاص طور تي، ان جو listIterator() طريقو، جيڪو موٽائي ٿو هڪ وڌايل قسم جي iterator: ListIterator . هڪ باقاعده (معياري) جي طريقن جي اضافي ۾، هن قسم جا هيٺيان آهن:
-
add(<Element>) - لسٽ ۾ نئون عنصر شامل ڪري ٿو؛
-
hasPrevious() - واپسي صحيح آھي جيڪڏھن ڪو عنصر موجود آھي ايندڙ عنصر کان اڳ (جيڪڏھن ڪو اڳوڻو عنصر آھي)؛
-
nextIndex() - ايندڙ عنصر جي انڊيڪس واپسي؛
-
اڳوڻو () - پوئين عنصر کي واپس ڏئي ٿو (ايندڙ عنصر کان اڳ)؛
-
اڳوڻو انڊيڪس پوئين عنصر جي انڊيڪس کي واپس ڪري ٿو.
-
set(<Element>) - ايندڙ () يا پوئين () پاران موٽايل آخري عنصر کي تبديل ڪري ٿو .

85. جاوا ڪليڪشن فريم ورڪ ۾ ڪهڙي ڪليڪشن جو درجو موجود آهي؟
جاوا ۾ ٻه مجموعا hierarchies آهن. پهريون درجو آهي مجموعو hierarchy، جنهن جي جوڙجڪ هيٺ ڏنل آهي:
-
سيٽ هڪ انٽرفيس آهي جيڪو بيان ڪري ٿو هڪ سيٽ، هڪ ڊيٽا جي جوڙجڪ جنهن ۾ غير ترتيب ڏنل منفرد (غير ورجائيندڙ) عناصر شامل آهن. ھن انٽرفيس ۾ ڪجھ معياري عمل آھن: TreeSet ، HashSet ، ۽ LinkedHashSet .
-
لسٽ هڪ انٽرفيس آهي جيڪو ڊيٽا جي جوڙجڪ کي بيان ڪري ٿو جيڪو شين جي ترتيب ڏنل ترتيب کي محفوظ ڪري ٿو. ھڪڙي لسٽ ۾ شيون داخل ڪري سگھجن ٿيون ۽ لسٽ ۾ انھن جي انڊيڪس ذريعي ختم ڪري سگھجن ٿيون (جهڙوڪ ھڪڙي صف، پر متحرڪ ريزائزنگ سان). ھن انٽرفيس ۾ ڪجھ معياري لاڳو آھن: ArrayList , Vector ( deprecated and not actually use )، ۽ LinkedList .
-
قطار هڪ انٽرفيس آهي جيڪو ڊيٽا جي جوڙجڪ کي بيان ڪري ٿو جيڪو شيون ذخيرو ڪري ٿو فرسٽ ان فرسٽ آئوٽ (FIFO) قطار ۾. ھن انٽرفيس ۾ ھيٺ ڏنل معياري عمل آھن: LinkedList (اھو صحيح آھي، اھو پڻ لاڳو ڪري ٿو قطار ) ۽ PriotityQueue .


86. ArrayList جي اندروني جوڙجڪ ڇا آهي؟
هڪ ArrayList هڪ صف وانگر آهي، پر اهو متحرڪ طور تي وڌائي سگھي ٿو. هن جو مطلب ڇا آهي؟ هود جي تحت، ArrayList هڪ عام صف استعمال ڪري ٿو، يعني اهو پنهنجي عناصر کي اندروني صف ۾ محفوظ ڪري ٿو جنهن جي ڊفالٽ سائيز 10 سيلز آهي. هڪ دفعو اندروني صف مڪمل آهي، هڪ نئين صف ٺاهي وئي آهي. نئين صف جي سائيز هن فارمولا طرفان طئي ڪئي وئي آهي:<size of the current array> * 3 / 2 + 1
تنهن ڪري، جيڪڏهن اسان جي صف جي سائيز 10 آهي، ته پوء نئين جي سائيز هوندي: 10 * 3 / 2 + 1 = 16. پوء اصل (پراڻي) صف مان سڀئي قيمتون ان ۾ نقل ڪيون وينديون بلٽ ان استعمال ڪندي. System.arraycopy() طريقو، ۽ اصل صف ختم ٿي وئي آهي. مختصر طور تي، اهو ڪيئن آهي ArrayList متحرڪ ريزيزنگ کي لاڳو ڪري ٿو. اچو ته سڀ کان مشهور ArrayList طريقن تي غور ڪريون: 1. add(<Element>) — هڪ عنصر شامل ڪري ٿو صف جي آخر ۾ (آخري خالي سيل ۾)، پهرين چيڪ ڪرڻ کان پوءِ ته ڇا صف ۾ موجود سيل موجود آهي. جيڪڏهن نه، هڪ نئين صف ٺاهي وئي آهي، ۽ عناصر ان ۾ نقل ڪيا ويا آهن. هن آپريشن جي وقت جي پيچيدگي O (1) آهي. اتي ھڪڙو ساڳيو اضافو (<Index>، <Element>) طريقو آھي. اهو هڪ عنصر شامل ڪري ٿو فهرست جي آخر ۾ نه (سري)، پر مخصوص سيل ڏانهن اشارو ڪيو ويو آهي انڊيڪس طرفان جيڪو هڪ دليل طور آيو آهي. انهي صورت ۾، وقت جي پيچيدگي مختلف ٿي ويندي ان جي بنياد تي جتي توهان شامل ڪيو ٿا:
- جيڪڏهن اضافو فهرست جي شروعات جي ويجهو آهي، پوء وقت جي پيچيدگي O (N) جي ويجهو هوندي، ڇاڪاڻ ته نئين جي ساڄي پاسي واقع سڀني عنصرن کي هڪ سيل کي ساڄي طرف منتقل ڪرڻو پوندو؛
- جيڪڏهن عنصر وچ ۾ داخل ڪيو ويو آهي، پوء اهو ٿيندو O (N/2)، ڇو ته اسان کي صرف فهرست جي اڌ شيون هڪ سيل کي ساڄي طرف منتقل ڪرڻ جي ضرورت آهي.
87. LinkedList جي اندروني جوڙجڪ ڇا آهي؟
هڪ ArrayList اندروني صف ۾ عناصر تي مشتمل آهي، پر هڪ LinkedList انهن کي ٻيڻو ڳنڍيل فهرست ۾ محفوظ ڪري ٿو. هن جو مطلب اهو آهي ته هر عنصر ۾ هڪ لنڪ شامل آهي پوئين عنصر ۽ ايندڙ عنصر ڏانهن . پهريون عنصر پوئين عنصر سان ڳنڍيل نه آهي (آخرڪار، اهو پهريون آهي). اهو پڻ سمجهيو ويندو آهي فهرست جو سر، ۽ LinkedList اعتراض ان ڏانهن سڌو حوالو آهي. اهڙي طرح، آخري عنصر ۾ ايندڙ عنصر نه آهي، ڇاڪاڻ ته اهو فهرست جي دم آهي. LinkedList اعتراض پڻ سڌو سنئون حوالو ڏئي ٿو . هن جو مطلب آهي ته فهرست جي سر يا دم تائين رسائي جي وقت جي پيچيدگي O (1) آهي. ArrayList

- جيڪڏهن اهو سر يا دم جي ويجهو آهي، آپريشن O (1) جي ويجهو هوندو، ڇاڪاڻ ته اهو اصل ۾ عناصرن کي ٻيهر ڏيڻ جي ضرورت نه هوندي؛
- جيڪڏهن اهو وچ جي ويجهو آهي ته پوءِ اسان وٽ O(N/2) هوندو، ڇاڪاڻ ته طريقو هڪ ئي وقت سر ۽ دم مان ڳوليندو جيستائين گهربل عنصر نه ملي.

88. HashMap جي اندروني جوڙجڪ ڇا آهي؟
اهو ٿي سگهي ٿو جاوا ڊولپر اميدوارن کان پڇڻ لاءِ سڀ کان مشهور انٽرويو سوالن مان. هڪ HashMap اهم-قدر جوڑوں سان ڪم ڪري ٿو . اهي پاڻ HashMap اندر ڪيئن محفوظ ڪيا ويا آهن ؟ HashMap ۾ نوڊس جي اندروني صف آھي:Node<K,V>[] table
ڊفالٽ طور، صف جي سائيز 16 آهي، ۽ اهو هر وقت ٻيڻو ٿي ويندو آهي جڏهن اهو عناصر سان ڀريو ويندو آهي (اهو آهي، جڏهن LOAD_FACTOR پهچي ويندو آهي؛ اهو حد بيان ڪري ٿو ته ڪيئن مڪمل ٿي سگهي ٿو صف حاصل ڪري سگھي ٿو - ڊفالٽ طور، اهو 0.75 آهي ) . هر نوڊس کي ذخيرو ڪري ٿو هڪ هيش، ڪي، هڪ قدر، ۽ ايندڙ عنصر ڏانهن هڪ حوالو: 
- سيل خالي آھي - ھن صورت ۾، نئين نوڊ قدر ان ۾ ذخيرو ٿيل آھي.
- سيل خالي نه آهي - انهي صورت ۾، ڪنجين جي قيمتن جي مقابلي ۾ آهن. جيڪڏهن اهي برابر آهن، ته پوء نئين نوڊ قدر پراڻي هڪ مٿان لکندو آهي؛ جيڪڏهن برابر نه آهي، ته پوءِ ايندڙ تائين پهچبو آهي، ۽ ان جي ڪيئي جو مقابلو ڪيو ويندو آهي... ۽ ائين ئي، جيستائين نئين قيمت يا ته ڪجهه پراڻي قيمت کي ختم ڪري ڇڏي يا اسان اڪيلو ڳنڍيل فهرست جي آخر تائين پهچي وڃون ٿا ۽ پوءِ نئين قيمت کي اتي محفوظ ڪريون ٿا. آخري عنصر.

GO TO FULL VERSION