CodeGym /جاوا بلاگ /Random-SD /جاوا ڊيڪ انٽرفيس
John Squirrels
سطح
San Francisco

جاوا ڊيڪ انٽرفيس

گروپ ۾ شايع ٿيل
جاوا ڊيڪ هڪ ڊيٽا جي جوڙجڪ آهي جيڪا هڪ عام قطار ۽ اسٽيڪ کي گڏ ڪري ٿي. توھان شامل ڪري سگھوٿا ۽ عناصر کي ختم ڪري سگھوٿا سر ۽ دم تائين. "روايتي" قطار ۾ توهان عناصر کي قطار جي دم ۾ شامل ڪريو (آخري عنصر کان پوء) ۽ قطار جي سر مان عناصر کي هٽايو. هن اصول کي فرسٽ ان فرسٽ آئوٽ (FIFO) سڏيو ويندو آهي ۽ اهو حقيقي زندگي ۾ گراهڪن جي ڪنهن به معمولي لائن وانگر ڪم ڪري ٿو. جاوا ۾ قطار هڪ انٽرفيس آهي، جيڪو ڪليڪشن فريم ورڪ جو حصو آهي. جاوا ڊيڪ انٽرفيس - 1 هتي پڻ هڪ اهم ڊيٽا جي جوڙجڪ آهي جنهن کي اسٽيڪ سڏيو ويندو آهي، هڪ فهرست جيڪا عناصر سان مڪمل طور تي ريورس اصول ۾ ڪم ڪري ٿي، LIFO - آخري اندر، پهرين ٻاهر. اهو پليٽن جي اسٽيڪ وانگر آهي، شامل ڪرڻ يا ختم ڪرڻ صرف ممڪن آهي مٿين تي. جاوا ڊيڪ انٽرفيس - 2

قطار بمقابله Deque

Deque هڪ عجيب قسم جي قطار آهي: توهان نون عناصر شامل ڪري سگهو ٿا ٻنهي جي دم ۽ لڪير جي سر ۾. ساڳي ڪهاڻي ختم ڪرڻ سان: توهان هن ڍانچي مان آخري يا پهريون عنصر هٽائي سگهو ٿا. ان ڪري، اهو لڳي ٿو ته اسٽيڪ ۽ قطار جو ميلاپ. جاوا ڊيڪ انٽرفيس - 3نالو "Deque" جو مطلب آهي "ڊبل ختم ٿيل قطار". "Deque" تاش جي "ڊيڪ" وانگر بيان ڪيو ويو آهي ۽ توهان کي خبر آهي ته ڇا؟ اهو ڪجهه حد تائين ڪارڊ جي حقيقي ڊيڪ وانگر آهي: توهان شايد اهڙي ڊيڪ جي هيٺان يا مٿين کان هڪ ڪارڊ وٺي سگهو ٿا. ڪجھ لڪير جي جوڙجڪ جي ٻنهي پاسن کان عناصر شامل ڪرڻ يا ختم ڪرڻ چاھيو ٿا؟ Deque استعمال ڪريو. جاوا 8 يا لڳ ڀڳ ڪنهن ٻئي ورجن کي سپورٽ ڪري ٿو. تصور ڪريو هڪ عام ليگو برڪ ۽ هڪ ڪالمن ”ٽاورز“ سرن مان ٺهيل آهن. توهان ٽاور جي چوٽي يا تري ۾ هڪ نئين سر شامل ڪري سگهو ٿا. توهان ٻنهي پاسن کان هڪ اينٽ پڻ هٽائي سگهو ٿا. هتي اسان وٽ هڪ مثال آهي: اسان سڀني پيلي سرن کي مٿي ۾ شامل ڪندا آهيون ۽ سڀ ڳاڙهي هيٺان. اسان هن مثال کي جلد ئي جاوا ڪوڊ سان ڏيکارينداسين. جاوا ڊيڪ انٽرفيس - 4تنهن ڪري توهان Java Deque جي ٻنهي سرن کان قطار ۽ dequeue ڪري سگهو ٿا، ان جو مطلب آهي ته توهان هڪ Deque کي قطار ۽ اسٽيڪ ٻنهي طور استعمال ڪري سگهو ٿا. جاوا ۾ اسٽيڪ بابت پڙهو: جاوا اسٽيڪ 101: اسٽيڪ ڪلاس ۾ داخل ٿيڻ جاوا ۾ قطار بابت پڙهو: جاوا قطار انٽرفيس ۽ ان تي عمل درآمد

ڊيڪ جون خاصيتون

  • جاوا ۾ ڊيڪ هڪ انٽرفيس آهي، جنهن تي عملدرآمد هڪ ريزائيبل صف جي مدد فراهم ڪري ٿو. تنهن ڪري توهان وٽ پابندي کان پاڪ گنجائش جو هڪ صف آهي ۽ توهان پنهنجي ضرورتن مطابق نوان عنصر شامل ڪري سگهو ٿا.
  • ڪيترن ئي موضوعن ذريعي موجوده رسائي Deque پاران سهڪار نه ڪئي وئي آهي
  • خارجي هم وقت سازي جي غير موجودگيءَ جي صورت ۾ ڊيڪ ٿريڊ-محفوظ نه آهي.
  • صف جي ڊيڪ ۾ ڪابه نول عناصر جي اجازت ناهي.

Deque Java Interface declaration


public interface Deque<E> extends Queue<E>

جاوا ڊيڪ جا طريقا

java.util.Deque ھڪڙو انٽرفيس آھي جيڪو جاوا قطار انٽرفيس کي وڌائيندو آھي ۽ ھڪڙي ڊبل ختم ٿيل قطار جي نمائندگي ڪري ٿو. تنهن ڪري توهان Deque سان ڪم ڪرڻ دوران جاوا قطار جا سڀئي طريقا استعمال ڪري سگهو ٿا. ان جي باوجود ڊيڪ اسٽيڪ انٽرفيس کي نه ٿو وڌائي، ڊيڪ انٽرفيس طريقن جي وضاحت ڪري ٿو جيڪي توهان کي عام اسٽيڪ آپريشن ڪرڻ جي قابل بڻائين ٿا جهڙوڪ push ، peek ۽ pop .
  • boolean add(عنصر) Deque جي دم ۾ هڪ عنصر شامل ڪري ٿو. ڪاميابي تي صحيح موٽائي ٿو، هڪ غير قانوني اسٽيٽ ايڪسيپشن اڇلائي ٿو جيڪڏهن في الحال ڪا جاءِ موجود ناهي.
  • addFirst(عنصر) ڊيڪ جي سر ۾ هڪ عنصر شامل ڪري ٿو.
  • addLast(عنصر) ڊيڪ جي دم ۾ هڪ عنصر شامل ڪري ٿو.
  • offer(عنصر) دم ۾ هڪ عنصر شامل ڪري ٿو ۽ هڪ بوليان واپس ڪري ٿو وضاحت ڪرڻ لاءِ ته داخل ٿيڻ ڪامياب هو.
  • offerFirst(عنصر) هيڊ ۾ هڪ عنصر شامل ڪري ٿو ۽ هڪ بوليان واپس ڪري ٿو وضاحت ڪرڻ لاءِ ته داخل ٿيڻ ڪامياب هو.
  • offerLast(عنصر) دم ۾ هڪ عنصر شامل ڪري ٿو ۽ هڪ بوليان واپس ڪري ٿو وضاحت ڪرڻ لاءِ ته داخل ٿيڻ ڪامياب هو.
  • iterator() deque لاءِ هڪ آئٽرٽر موٽائي ٿو.
  • descendingIterator() هڪ آئٽرٽر موٽائي ٿو جنهن وٽ هن ڊيڪ لاءِ ريورس آرڊر آهي.
  • push(عنصر) سر ۾ هڪ عنصر شامل ڪري ٿو.
  • پاپ (عنصر) سر مان هڪ عنصر کي هٽائي ٿو ۽ ان کي واپس ڪري ٿو.
  • removeFirst() عنصر کي سر تي هٽائي ٿو.
  • removeLast() دم تي عنصر کي ختم ڪري ٿو.
  • poll() ٻيهر حاصل ڪري ٿو ۽ قطار جي مٿو کي هٽائي ٿو جيڪو هن ڊيڪ جي نمائندگي ڪري ٿو (ٻين لفظن ۾، هن ڊيڪ جو پهريون عنصر)، يا واپسي null جيڪڏهن هي ڊيڪ خالي آهي.
  • pollFirst() هن ڊيڪ جي پهرين عنصر کي ٻيهر حاصل ڪري ٿو ۽ هٽائي ٿو، يا جيڪڏهن هي ڊيڪ خالي آهي ته null موٽائي ٿو.
  • pollLast() حاصل ڪري ٿو ۽ هن ڊيڪ جي آخري عنصر کي هٽائي ٿو، يا null موٽائي ٿو جيڪڏهن هي ڊيڪ خالي آهي.
  • peek() ٻيهر حاصل ڪري ٿو، پر نه هٽائي ٿو، قطار جو مٿو جيڪو هن ڊيڪ جي نمائندگي ڪري ٿو (ٻين لفظن ۾، هن ڊيڪ جو پهريون عنصر)، يا واپسي null جيڪڏهن هي ڊيڪ خالي آهي.
  • peekFirst() حاصل ڪري ٿو، پر نه هٽائي ٿو، هن ڊيڪ جو پهريون عنصر، يا واپسي null جيڪڏهن هي ڊيڪ خالي آهي.
  • peekLast() حاصل ڪري ٿو، پر نه هٽائي ٿو، هن ڊيڪ جي آخري عنصر کي، يا null موٽائي ٿو جيڪڏهن هي ڊيڪ خالي آهي.
ھتي ھيٺ ڏنل جدول ۾ سڀني طريقن کي گروپن ۾ ورهايو ويو آھي. جئين توهان ڏسي سگهو ٿا ته عنصر شامل ڪرڻ ۽ ختم ڪرڻ جا ڪيترائي مختلف طريقا آهن. مثال طور، ٻئي removeFirst() ۽ pop() deque مان پهريون عنصر هٽايو. ٻيو ”آيو“ اسٽيڪ مان. ان جو مطلب آهي ته جيڪڏهن توهان پنهنجي ArrayDeque کي صرف اسٽيڪ طور استعمال ڪيو ٿا، استعمال ڪريو پاپ () هٽائڻ لاءِ، push() شامل ڪرڻ ۽ peek() جاچڻ لاءِ. اهو توهان جي ڪوڊ کي ٻين ڊولپرز لاءِ وڌيڪ سمجھدار بڻائي ٿو.
پهريون عنصر (سر) آخري عنصر (دم)
آپريشن اڇلائي ٿو استثنا خاص قدر اڇلائي ٿو استثنا خاص قدر
داخل ڪرڻ شامل ڪريو فرسٽ(اي)/پش(اي) پهرين آڇ (اي) شامل ڪريو آخري (e) آڇ آخري()
هٽايو هٽايو پهريون()/پاپ() ووٽ پهريون() هٽايو آخري() پول آخري()
جاچڻ پهرين حاصل ڪريو() جھانڪ فرسٽ ()/ جھانڪ () حاصل آخري () پِيڪ لاسٽ()

ڊيڪ تي عملدرآمد

جاوا ڊيڪ هڪ انٽرفيس آهي ۽ جاوا ڪليڪشن API ۾ لاڳو ڪيل آهي:
  • java.util.LinkedList //List ۽ Deque لاڳو ڪرڻ
  • java.util.ArrayDeque //Deque عملدرآمد، جاوا لائبريري
جاوا ڊيڪ انٽرفيس - 5LinkedList ڪلاس اندروني طور تي ڊبل ڳنڍيل لسٽ استعمال ڪري ٿو ھڪڙي قطار يا ڊيڪ کي ماڊل ڪرڻ لاءِ. 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) هڪ قطار ٺاهي ٿو ڀريو مجموعو گڏ ڪرڻ جي عناصر سان.
  • ArrayDeque (int ظرفيت) هڪ قطار ٺاهي ٿو شروعاتي ظرفيت جي گنجائش سان. جيڪڏهن توهان ابتدائي گنجائش بيان نه ڪندا آهيو، ڊفالٽ گنجائش 16 آهي.

جاوا ڊيڪ مثال - ArrayDeque

مضمون جي شروعات کان ليگو ٽاور مثال ياد رکو؟ اچو ته Lego Bricks مان ٺهيل ون ڪالمن ٽاورز ٺاهڻ لاءِ هڪ ڪلاس ٺاهيون. سرون ڳاڙهي، پيلو يا نيري ٿي سگهن ٿيون. اسان جي ٽاور جي عمارت جو قاعدو: اسان ڳاڙهي سرن کي هيٺان ۽ پيلي سرن کي مٿي تي رکون ٿا. بگ جاوا ڊيڪ مثال

//enum with colors 
public enum Color {
   RED, YELLOW, BLUE;
}

//class for the standard Lego Brick. You can connect or disconnect the Brick, it has color   
public class LegoBrick {
   Color color;
   boolean isConnected;

   public void connect() {
       System.out.println("This brick is connected");
       this.isConnected = true;
   }

   public void disconnect() {
       System.out.println("Disconnected");
       isConnected = false;
   }

   public LegoBrick(Color color, boolean isConnected) {
       this.color = color;
       this.isConnected = isConnected;
   }

   public Color getColor() {
       return color;
   }

   public boolean isConnected() {
       return isConnected;
   }

   @Override
   public String toString() {
       return "LegoBrick{" +
              "color=" + color +
              ", isConnected=" + isConnected +
              '}';
   }
}
هتي اسان جي ٽاور ڪلاس آهي. اسان هڪ ٽاور شروع ڪريون ٿا. شروع ٿيل ٽاور ڳاڙهي ۽ پيلي جي مقدار تي منحصر آهي. اسان ٽاور ۾ سر شامل ڪري سگھون ٿا يا ان کي ختم ڪري سگھون ٿا. اسان ان کي مٿي ۾ شامل ڪندا آهيون جيڪڏهن اهو پيلو آهي ۽ ان کي تري ۾ شامل ڪريو جيڪڏهن اهو ڳاڙهو آهي.

import java.util.ArrayDeque;
public class LegoTower {
   ArrayDeque<LegoBrick> myTower;
   int quantityOfReds;
   int quantityOfYellows;

   public void addBrickToTower(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++;
       }
   }

   public void removeBrickFromTower (LegoBrick legoBrick) {
       if (legoBrick.getColor() == Color.YELLOW) {
           this.myTower.removeLast();
           quantityOfYellows--;
       }
       if (legoBrick.getColor() == Color.RED) {
           myTower.removeFirst();
           quantityOfReds--;
       }
       legoBrick.isConnected = false;

   }

   public LegoTower(int quantityOfReds, int quantityOfYellows) {

       myTower = new ArrayDeque<>();
       this.quantityOfReds = quantityOfReds;
       this.quantityOfYellows = quantityOfYellows;
       for (int i = 0; i < quantityOfReds; i++) {
           LegoBrick redLegoBrick = new LegoBrick(Color.RED, false);
           myTower.addFirst(redLegoBrick);
           redLegoBrick.isConnected = true;
       }
       for (int i = 0; i < quantityOfYellows; i++) {
           LegoBrick yellowLegoBrick = new LegoBrick(Color.YELLOW, false);
           myTower.addLast(yellowLegoBrick);
           yellowLegoBrick.isConnected = true;
       }
   }

   public void setMyTower(ArrayDeque<legobrick> myTower) {
       this.myTower = myTower;
   }

   public void setQuantityOfReds(int quantityOfReds) {
       this.quantityOfReds = quantityOfReds;
   }

   public void setQuantityOfYellows(int quantityOfYellows) {
       this.quantityOfYellows = quantityOfYellows;
   }

   @Override
   public String toString() {
       return "LegoTower{" +
              "myTower=" + myTower +
              ", quantityOfReds=" + quantityOfReds +
              ", quantityOfYellows=" + quantityOfYellows +
              '}';
   }

   public void drawTower() {
       for (LegoBrick i : myTower) {
           System.out.println(i.color);
       }
   }
}


public class Main {
   public static void main(String[] args) {
       LegoBrick legoBrick1 = new LegoBrick(Color.YELLOW, false);
       legoBrick1.connect();
       System.out.println(legoBrick1.toString());
       legoBrick1.disconnect();
       System.out.println(legoBrick1.toString());
       LegoBrick legoBrick2 = new LegoBrick(Color.YELLOW, false);
       LegoBrick legoBrick3 = new LegoBrick(Color.RED, false);
       LegoBrick legoBrick4 = new LegoBrick(Color.RED, false);
       LegoBrick legoBrick5 = new LegoBrick(Color.YELLOW, false);

       LegoTower legoTower = new LegoTower(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
انتظار ڪريو، ڇا؟؟ مٿي تي ڳاڙها ڇو آهن؟ نه، اهي نٿا ڪن. اهي صرف پهرين (هيٺيان) کان آخري (مٿي) تائين شروع ٿيندڙ ڪنسول ڏانهن ڇپيل آهن. تنهن ڪري جيڪڏهن توهان ڪجهه ڏسڻ چاهيو ٿا جهڙوڪ تصوير ۾ مٿي ڏنل سرن سان، توهان تبديل ڪري سگهو ٿا ڊرا ٽاور طريقو LegoTower ڪلاس جو. اهو هڪ تمام آسان ڪم آهي!

LinkedList

لسٽ انٽرفيس شيون شامل ڪرڻ جي ترتيب کي برقرار رکي ٿو ۽ انڊيڪس ذريعي شيون تائين رسائي جي اجازت ڏئي ٿو. Deque هڪ ٻه طرفي قطار آهي، ۽ اهو ٻنهي پاسن کان عناصر کي شامل ڪرڻ ۽ ختم ڪرڻ جي حمايت ڪري ٿو. جاوا ڊيڪ انٽرفيس - 6LinkedList بنيادي طور تي هڪ فهرست تي عمل درآمد جي طور تي سڃاتو وڃي ٿو، پر هي طبقو پڻ Deque کي لاڳو ڪري ٿو، ۽ اهو اسان کي اجازت ڏئي ٿو ته هڪ ٻه طرفي قطار ٺاهي جنهن ۾ ڪنهن به شئي شامل هجي جنهن ۾ null شامل آهن. LinkedList عناصر جو هڪ مجموعو آهي. اسان ان کي ڪلاس جي ڪوڊ ماخذ ۾ ڏسي سگهون ٿا، هن ڀيري شعبن تي ڌيان ڏيو: هتي اسان هڪ مثال شامل ڪيو، پر جيڪڏهن توهان LinkedList بابت وڌيڪ سکڻ چاهيو ٿا، ڀلي ڪري آيا هن CodeGym مضمون ۾ .

جاوا ۾ ڳنڍيل لسٽ تي عمل درآمد، عناصر شامل ڪرڻ ۽ ختم ڪرڻ. مثال

اچو ته انهن عملن کي عملي طور تي ڪوشش ڪريون. پهريون، جاوا LinkedList تي عملدرآمد: Strings جي LinkedList ٺاهڻ، اتي 3 عناصر شامل ڪرڻ. پوء هڪ هٽايو، پوء وچ ۾ هڪ شامل ڪريو.

public class MyLinkedTest {
   public static void main(String[] args) {
       String h1 = "my";
       String h2 = "favorite";
       String h3 = "book";
//  LinkedList implementation in Java
       LinkedList<string> linkedList = new LinkedList();
       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]
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION