جاوا ڊيڪ هڪ ڊيٽا جي جوڙجڪ آهي جيڪا هڪ عام قطار ۽ اسٽيڪ کي گڏ ڪري ٿي. توھان شامل ڪري سگھوٿا ۽ عناصر کي ختم ڪري سگھوٿا سر ۽ دم تائين. "روايتي" قطار ۾ توهان عناصر کي قطار جي دم ۾ شامل ڪريو (آخري عنصر کان پوء) ۽ قطار جي سر مان عناصر کي هٽايو. هن اصول کي فرسٽ ان فرسٽ آئوٽ (FIFO) سڏيو ويندو آهي ۽ اهو حقيقي زندگي ۾ گراهڪن جي ڪنهن به معمولي لائن وانگر ڪم ڪري ٿو. جاوا ۾ قطار هڪ انٽرفيس آهي، جيڪو ڪليڪشن فريم ورڪ جو حصو آهي. هتي پڻ هڪ اهم ڊيٽا جي جوڙجڪ آهي جنهن کي اسٽيڪ سڏيو ويندو آهي، هڪ فهرست جيڪا عناصر سان مڪمل طور تي ريورس اصول ۾ ڪم ڪري ٿي، LIFO - آخري اندر، پهرين ٻاهر. اهو پليٽن جي اسٽيڪ وانگر آهي، شامل ڪرڻ يا ختم ڪرڻ صرف ممڪن آهي مٿين تي.
قطار بمقابله Deque
Deque هڪ عجيب قسم جي قطار آهي: توهان نون عناصر شامل ڪري سگهو ٿا ٻنهي جي دم ۽ لڪير جي سر ۾. ساڳي ڪهاڻي ختم ڪرڻ سان: توهان هن ڍانچي مان آخري يا پهريون عنصر هٽائي سگهو ٿا. ان ڪري، اهو لڳي ٿو ته اسٽيڪ ۽ قطار جو ميلاپ. نالو "Deque" جو مطلب آهي "ڊبل ختم ٿيل قطار". "Deque" تاش جي "ڊيڪ" وانگر بيان ڪيو ويو آهي ۽ توهان کي خبر آهي ته ڇا؟ اهو ڪجهه حد تائين ڪارڊ جي حقيقي ڊيڪ وانگر آهي: توهان شايد اهڙي ڊيڪ جي هيٺان يا مٿين کان هڪ ڪارڊ وٺي سگهو ٿا. ڪجھ لڪير جي جوڙجڪ جي ٻنهي پاسن کان عناصر شامل ڪرڻ يا ختم ڪرڻ چاھيو ٿا؟ Deque استعمال ڪريو. جاوا 8 يا لڳ ڀڳ ڪنهن ٻئي ورجن کي سپورٽ ڪري ٿو. تصور ڪريو هڪ عام ليگو برڪ ۽ هڪ ڪالمن ”ٽاورز“ سرن مان ٺهيل آهن. توهان ٽاور جي چوٽي يا تري ۾ هڪ نئين سر شامل ڪري سگهو ٿا. توهان ٻنهي پاسن کان هڪ اينٽ پڻ هٽائي سگهو ٿا. هتي اسان وٽ هڪ مثال آهي: اسان سڀني پيلي سرن کي مٿي ۾ شامل ڪندا آهيون ۽ سڀ ڳاڙهي هيٺان. اسان هن مثال کي جلد ئي جاوا ڪوڊ سان ڏيکارينداسين. تنهن ڪري توهان Java Deque جي ٻنهي سرن کان قطار ۽ dequeue ڪري سگهو ٿا، ان جو مطلب آهي ته توهان هڪ Deque کي قطار ۽ اسٽيڪ ٻنهي طور استعمال ڪري سگهو ٿا. جاوا ۾ اسٽيڪ بابت پڙهو: جاوا اسٽيڪ 101: اسٽيڪ ڪلاس ۾ داخل ٿيڻ
جاوا ۾ قطار بابت پڙهو: جاوا قطار انٽرفيس ۽ ان تي عمل درآمد
ڊيڪ جون خاصيتون
جاوا ۾ ڊيڪ هڪ انٽرفيس آهي، جنهن تي عملدرآمد هڪ ريزائيبل صف جي مدد فراهم ڪري ٿو. تنهن ڪري توهان وٽ پابندي کان پاڪ گنجائش جو هڪ صف آهي ۽ توهان پنهنجي ضرورتن مطابق نوان عنصر شامل ڪري سگهو ٿا.
خارجي هم وقت سازي جي غير موجودگيءَ جي صورت ۾ ڊيڪ ٿريڊ-محفوظ نه آهي.
صف جي ڊيڪ ۾ ڪابه نول عناصر جي اجازت ناهي.
Deque Java Interface declaration
publicinterfaceDeque<E>extendsQueue<E>
جاوا ڊيڪ جا طريقا
java.util.Deque ھڪڙو انٽرفيس آھي جيڪو جاوا قطار انٽرفيس کي وڌائيندو آھي ۽ ھڪڙي ڊبل ختم ٿيل قطار جي نمائندگي ڪري ٿو. تنهن ڪري توهان Deque سان ڪم ڪرڻ دوران جاوا قطار جا سڀئي طريقا استعمال ڪري سگهو ٿا. ان جي باوجود ڊيڪ اسٽيڪ انٽرفيس کي نه ٿو وڌائي، ڊيڪ انٽرفيس طريقن جي وضاحت ڪري ٿو جيڪي توهان کي عام اسٽيڪ آپريشن ڪرڻ جي قابل بڻائين ٿا جهڙوڪ push ، peek ۽ pop .
boolean add(عنصر) Deque جي دم ۾ هڪ عنصر شامل ڪري ٿو. ڪاميابي تي صحيح موٽائي ٿو، هڪ غير قانوني اسٽيٽ ايڪسيپشن اڇلائي ٿو جيڪڏهن في الحال ڪا جاءِ موجود ناهي.
addFirst(عنصر) ڊيڪ جي سر ۾ هڪ عنصر شامل ڪري ٿو.
addLast(عنصر) ڊيڪ جي دم ۾ هڪ عنصر شامل ڪري ٿو.
offer(عنصر) دم ۾ هڪ عنصر شامل ڪري ٿو ۽ هڪ بوليان واپس ڪري ٿو وضاحت ڪرڻ لاءِ ته داخل ٿيڻ ڪامياب هو.
offerFirst(عنصر) هيڊ ۾ هڪ عنصر شامل ڪري ٿو ۽ هڪ بوليان واپس ڪري ٿو وضاحت ڪرڻ لاءِ ته داخل ٿيڻ ڪامياب هو.
offerLast(عنصر) دم ۾ هڪ عنصر شامل ڪري ٿو ۽ هڪ بوليان واپس ڪري ٿو وضاحت ڪرڻ لاءِ ته داخل ٿيڻ ڪامياب هو.
پاپ (عنصر) سر مان هڪ عنصر کي هٽائي ٿو ۽ ان کي واپس ڪري ٿو.
removeFirst() عنصر کي سر تي هٽائي ٿو.
removeLast() دم تي عنصر کي ختم ڪري ٿو.
poll() ٻيهر حاصل ڪري ٿو ۽ قطار جي مٿو کي هٽائي ٿو جيڪو هن ڊيڪ جي نمائندگي ڪري ٿو (ٻين لفظن ۾، هن ڊيڪ جو پهريون عنصر)، يا واپسي null جيڪڏهن هي ڊيڪ خالي آهي.
pollFirst() هن ڊيڪ جي پهرين عنصر کي ٻيهر حاصل ڪري ٿو ۽ هٽائي ٿو، يا جيڪڏهن هي ڊيڪ خالي آهي ته null موٽائي ٿو.
pollLast() حاصل ڪري ٿو ۽ هن ڊيڪ جي آخري عنصر کي هٽائي ٿو، يا null موٽائي ٿو جيڪڏهن هي ڊيڪ خالي آهي.
peek() ٻيهر حاصل ڪري ٿو، پر نه هٽائي ٿو، قطار جو مٿو جيڪو هن ڊيڪ جي نمائندگي ڪري ٿو (ٻين لفظن ۾، هن ڊيڪ جو پهريون عنصر)، يا واپسي null جيڪڏهن هي ڊيڪ خالي آهي.
peekFirst() حاصل ڪري ٿو، پر نه هٽائي ٿو، هن ڊيڪ جو پهريون عنصر، يا واپسي null جيڪڏهن هي ڊيڪ خالي آهي.
peekLast() حاصل ڪري ٿو، پر نه هٽائي ٿو، هن ڊيڪ جي آخري عنصر کي، يا null موٽائي ٿو جيڪڏهن هي ڊيڪ خالي آهي.
ھتي ھيٺ ڏنل جدول ۾ سڀني طريقن کي گروپن ۾ ورهايو ويو آھي. جئين توهان ڏسي سگهو ٿا ته عنصر شامل ڪرڻ ۽ ختم ڪرڻ جا ڪيترائي مختلف طريقا آهن. مثال طور، ٻئي removeFirst() ۽ pop() deque مان پهريون عنصر هٽايو. ٻيو ”آيو“ اسٽيڪ مان. ان جو مطلب آهي ته جيڪڏهن توهان پنهنجي ArrayDeque کي صرف اسٽيڪ طور استعمال ڪيو ٿا، استعمال ڪريو پاپ () هٽائڻ لاءِ، push() شامل ڪرڻ ۽ peek() جاچڻ لاءِ. اهو توهان جي ڪوڊ کي ٻين ڊولپرز لاءِ وڌيڪ سمجھدار بڻائي ٿو.
LinkedList ڪلاس اندروني طور تي ڊبل ڳنڍيل لسٽ استعمال ڪري ٿو ھڪڙي قطار يا ڊيڪ کي ماڊل ڪرڻ لاءِ. ArrayDeque ڪلاس عناصر کي اندروني طور تي ھڪڙي صف ۾ ذخيرو ڪري ٿو. جيڪڏهن عناصر جو تعداد صف جي مقدار کان وڌي وڃي، هڪ نئين صف مختص ڪئي وئي آهي، ۽ سڀئي عناصر منتقل ٿي ويا آهن. ان جو مطلب آهي ArrayDeque ضرورتن سان وڌي ٿو.
ArrayDeque ڪلاس
ArrayDeque <E> ڪلاس هڪ عام ٻه طرفي قطار آهي، وراثت واري ڪارڪردگي AbstractCollection طبقي کان ۽ استعمال ڪندي Deque انٽرفيس. ArrayDeque deque ۽ resizable-array استعمال ڪرڻ جي سهولت فراهم ڪري ٿي. شروعات ۾، صف کي 16 سائيز سان شروع ڪيو ويندو آهي. ان کي ٻه طرفي قطار جي طور تي لاڳو ڪيو ويندو آهي، جتي اهو ٻن پوائنٽن کي سپورٽ ڪري ٿو، يعني هيڊ ۽ دم. اهو AbstractCollection ڪلاس کي ورثي ۾ ڏئي ٿو ۽ Deque انٽرفيس کي لاڳو ڪري ٿو. ArrayDeque ڪلاس بابت اهم نقطا آهن:
توھان عناصر شامل ڪري سگھو ٿا يا ختم ڪري سگھو ٿا دم ۽ سر مان ArrayDeque
ناريل عناصر جي اجازت نه آهي
ArrayDeque ڌاڳو محفوظ ناهي، خارجي هم وقت سازي جي غير موجودگي ۾.
ArrayDeque ۾ ڪا گنجائش پابنديون ناهي.
ArrayDeque ڪلاس تعمير ڪندڙ
ArrayDeque () هڪ خالي قطار ٺاهي ٿو.
ArrayDeque (collection <? extends E> collection) هڪ قطار ٺاهي ٿو ڀريو مجموعو گڏ ڪرڻ جي عناصر سان.
مضمون جي شروعات کان ليگو ٽاور مثال ياد رکو؟ اچو ته Lego Bricks مان ٺهيل ون ڪالمن ٽاورز ٺاهڻ لاءِ هڪ ڪلاس ٺاهيون. سرون ڳاڙهي، پيلو يا نيري ٿي سگهن ٿيون. اسان جي ٽاور جي عمارت جو قاعدو: اسان ڳاڙهي سرن کي هيٺان ۽ پيلي سرن کي مٿي تي رکون ٿا. بگ جاوا ڊيڪ مثال
//enum with colors publicenumColor{
RED, YELLOW, BLUE;}//class for the standard Lego Brick. You can connect or disconnect the Brick, it has color publicclassLegoBrick{Color color;boolean isConnected;publicvoidconnect(){System.out.println("This brick is connected");this.isConnected =true;}publicvoiddisconnect(){System.out.println("Disconnected");
isConnected =false;}publicLegoBrick(Color color,boolean isConnected){this.color = color;this.isConnected = isConnected;}publicColorgetColor(){return color;}publicbooleanisConnected(){return isConnected;}@OverridepublicStringtoString(){return"LegoBrick{"+"color="+ color +", isConnected="+ isConnected +'}';}}
هتي اسان جي ٽاور ڪلاس آهي. اسان هڪ ٽاور شروع ڪريون ٿا. شروع ٿيل ٽاور ڳاڙهي ۽ پيلي جي مقدار تي منحصر آهي. اسان ٽاور ۾ سر شامل ڪري سگھون ٿا يا ان کي ختم ڪري سگھون ٿا. اسان ان کي مٿي ۾ شامل ڪندا آهيون جيڪڏهن اهو پيلو آهي ۽ ان کي تري ۾ شامل ڪريو جيڪڏهن اهو ڳاڙهو آهي.
importjava.util.ArrayDeque;publicclassLegoTower{ArrayDeque<LegoBrick> myTower;int quantityOfReds;int quantityOfYellows;publicvoidaddBrickToTower(LegoBrick newLegoBrick){if(newLegoBrick.getColor()==Color.YELLOW){this.myTower.offerLast(newLegoBrick);
quantityOfYellows++;}//we can use addFirst(e)/push(e) instead of offerFirst here if(newLegoBrick.getColor()==Color.RED){
myTower.offerFirst(newLegoBrick);
quantityOfReds++;}}publicvoid removeBrickFromTower (LegoBrick legoBrick){if(legoBrick.getColor()==Color.YELLOW){this.myTower.removeLast();
quantityOfYellows--;}if(legoBrick.getColor()==Color.RED){
myTower.removeFirst();
quantityOfReds--;}
legoBrick.isConnected =false;}publicLegoTower(int quantityOfReds,int quantityOfYellows){
myTower =newArrayDeque<>();this.quantityOfReds = quantityOfReds;this.quantityOfYellows = quantityOfYellows;for(int i =0; i < quantityOfReds; i++){LegoBrick redLegoBrick =newLegoBrick(Color.RED,false);
myTower.addFirst(redLegoBrick);
redLegoBrick.isConnected =true;}for(int i =0; i < quantityOfYellows; i++){LegoBrick yellowLegoBrick =newLegoBrick(Color.YELLOW,false);
myTower.addLast(yellowLegoBrick);
yellowLegoBrick.isConnected =true;}}publicvoidsetMyTower(ArrayDeque<legobrick> myTower){this.myTower = myTower;}publicvoidsetQuantityOfReds(int quantityOfReds){this.quantityOfReds = quantityOfReds;}publicvoidsetQuantityOfYellows(int quantityOfYellows){this.quantityOfYellows = quantityOfYellows;}@OverridepublicStringtoString(){return"LegoTower{"+"myTower="+ myTower +", quantityOfReds="+ quantityOfReds +", quantityOfYellows="+ quantityOfYellows +'}';}publicvoiddrawTower(){for(LegoBrick i : myTower){System.out.println(i.color);}}}publicclassMain{publicstaticvoidmain(String[] args){LegoBrick legoBrick1 =newLegoBrick(Color.YELLOW,false);
legoBrick1.connect();System.out.println(legoBrick1.toString());
legoBrick1.disconnect();System.out.println(legoBrick1.toString());LegoBrick legoBrick2 =newLegoBrick(Color.YELLOW,false);LegoBrick legoBrick3 =newLegoBrick(Color.RED,false);LegoBrick legoBrick4 =newLegoBrick(Color.RED,false);LegoBrick legoBrick5 =newLegoBrick(Color.YELLOW,false);LegoTower legoTower =newLegoTower(2,5);System.out.println("my Initiated Lego Tower: ");
legoTower.drawTower();
legoTower.addBrickToTower(legoBrick1);
legoTower.addBrickToTower(legoBrick2);
legoTower.addBrickToTower(legoBrick3);
legoTower.addBrickToTower(legoBrick4);
legoTower.addBrickToTower(legoBrick5);System.out.println("My LegoTower after adding some elements: ");
legoTower.drawTower();
legoTower.removeBrickFromTower(legoBrick1);
legoTower.removeBrickFromTower(legoBrick3);System.out.println("We removed one red and one yellow brick:");
legoTower.drawTower();}}
هن پروگرام کي هلائڻ جو نتيجو:
my Initiated LegoTower:
RED
RED
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
My LegoTower after adding some elements:
RED
RED
RED
RED
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
We removed one red and one yellow brick:
RED
RED
RED
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
Process finished with exit code 0
لسٽ انٽرفيس شيون شامل ڪرڻ جي ترتيب کي برقرار رکي ٿو ۽ انڊيڪس ذريعي شيون تائين رسائي جي اجازت ڏئي ٿو. Deque هڪ ٻه طرفي قطار آهي، ۽ اهو ٻنهي پاسن کان عناصر کي شامل ڪرڻ ۽ ختم ڪرڻ جي حمايت ڪري ٿو. LinkedList بنيادي طور تي هڪ فهرست تي عمل درآمد جي طور تي سڃاتو وڃي ٿو، پر هي طبقو پڻ Deque کي لاڳو ڪري ٿو، ۽ اهو اسان کي اجازت ڏئي ٿو ته هڪ ٻه طرفي قطار ٺاهي جنهن ۾ ڪنهن به شئي شامل هجي جنهن ۾ null شامل آهن. LinkedList عناصر جو هڪ مجموعو آهي. اسان ان کي ڪلاس جي ڪوڊ ماخذ ۾ ڏسي سگهون ٿا، هن ڀيري شعبن تي ڌيان ڏيو: هتي اسان هڪ مثال شامل ڪيو، پر جيڪڏهن توهان LinkedList بابت وڌيڪ سکڻ چاهيو ٿا، ڀلي ڪري آيا هن CodeGym مضمون
۾ .
جاوا ۾ ڳنڍيل لسٽ تي عمل درآمد، عناصر شامل ڪرڻ ۽ ختم ڪرڻ. مثال
اچو ته انهن عملن کي عملي طور تي ڪوشش ڪريون. پهريون، جاوا LinkedList تي عملدرآمد: Strings جي LinkedList ٺاهڻ، اتي 3 عناصر شامل ڪرڻ. پوء هڪ هٽايو، پوء وچ ۾ هڪ شامل ڪريو.
publicclassMyLinkedTest{publicstaticvoidmain(String[] args){String h1 ="my";String h2 ="favorite";String h3 ="book";// LinkedList implementation in JavaLinkedList<string> linkedList =newLinkedList();
linkedList.add(h1);
linkedList.add(h2);
linkedList.add(h3);System.out.println("my list after adding 3 elements:");System.out.println(linkedList);System.out.println("element #2 of my list:");System.out.println(linkedList.get(2));
linkedList.remove(1);System.out.println("my list after removing #1:");System.out.println(linkedList);
linkedList.add(1,"first");System.out.println("my list after adding an element in the middle");System.out.println(linkedList);}
هن پروگرام کي هلائڻ جو نتيجو:
my list after adding 3 elements:
[my, favorite, book]
element #2 of my list:
book
my list after removing #1:
[my, book]
my list after adding an element in the middle
[my, first, book]
GO TO FULL VERSION