CodeGym /جاوا بلاگ /Random-UR /جاوا ڈیک انٹرفیس
John Squirrels
سطح
San Francisco

جاوا ڈیک انٹرفیس

گروپ میں شائع ہوا۔
جاوا ڈیک ایک ڈیٹا ڈھانچہ ہے جو ایک عام قطار اور اسٹیک کو یکجا کرتا ہے۔ آپ ڈیک کے سر اور دم دونوں عناصر کو شامل اور ہٹا سکتے ہیں۔ "روایتی" قطار میں آپ لائن کی دم میں عناصر شامل کرتے ہیں (آخری عنصر کے بعد) اور قطار کے سر سے عناصر کو ہٹا دیتے ہیں۔ اس اصول کو فرسٹ ان فرسٹ آؤٹ (FIFO) کہا جاتا ہے اور یہ حقیقی زندگی میں صارفین کی کسی بھی عام لائن کی طرح کام کرتا ہے۔ جاوا میں قطار ایک انٹرفیس ہے، جو کلیکشن فریم ورک کا ایک حصہ ہے۔ جاوا ڈیک انٹرفیس - 1 اسٹیک نامی ڈیٹا کا ایک اہم ڈھانچہ بھی ہے، ایک فہرست جو عناصر کے ساتھ مکمل طور پر الٹ اصول کے ساتھ کام کرتی ہے، LIFO — آخری میں، پہلے باہر۔ یہ پلیٹوں کے ڈھیر کی طرح ہے، شامل کرنا یا ہٹانا صرف اوپری حصے میں ہی ممکن ہے۔ جاوا ڈیک انٹرفیس - 2

قطار بمقابلہ ڈیک

ڈیک ایک عجیب قسم کی قطار ہے: آپ دم اور لائن کے سر دونوں میں نئے عناصر شامل کر سکتے ہیں۔ ہٹانے کے ساتھ ایک ہی کہانی: آپ اس ساخت سے آخری یا پہلا عنصر ہٹا سکتے ہیں۔ لہذا، ایسا لگتا ہے کہ یہ اسٹیک اور قطار کا مرکب ہے۔ جاوا ڈیک انٹرفیس - 3نام "Deque" کا مطلب ہے "Duble Ended Queue"۔ "ڈیک" کا تلفظ تاش کے "ڈیک" کی طرح ہوتا ہے اور آپ جانتے ہیں کیا؟ یہ کسی حد تک کارڈز کے اصلی ڈیک سے ملتا جلتا ہے: آپ اس طرح کے ڈیک کے نیچے یا اوپر سے کارڈ لے سکتے ہیں۔ کچھ لکیری ڈھانچے کے دونوں اطراف سے عناصر کو شامل کرنا یا ہٹانا چاہتے ہیں؟ Deque استعمال کریں۔ جاوا 8 یا تقریباً کوئی دوسرا ورژن اس کی حمایت کرتا ہے۔ اینٹوں سے بنی ایک عام لیگو اینٹ اور ایک کالم والے "ٹاورز" کا تصور کریں۔ آپ ٹاور کے اوپر یا نیچے ایک نئی اینٹ شامل کر سکتے ہیں۔ آپ دونوں اطراف سے ایک اینٹ بھی ہٹا سکتے ہیں۔ یہاں ہمارے پاس ایک مثال ہے: ہم تمام پیلے رنگ کی اینٹوں کو اوپر اور تمام سرخ کو نیچے سے جوڑتے ہیں۔ ہم جلد ہی اس مثال کو جاوا کوڈ کے ساتھ دکھائیں گے۔ جاوا ڈیک انٹرفیس - 4لہذا آپ Java Deque کے دونوں سروں سے enqueue اور dequeue کر سکتے ہیں، اس کا مطلب ہے کہ آپ Deque کو قطار اور اسٹیک دونوں کے طور پر استعمال کر سکتے ہیں۔ جاوا میں اسٹیک کے بارے میں پڑھیں: جاوا اسٹیک 101: اسٹیک کلاس میں داخل ہونا جاوا میں قطار کے بارے میں پڑھیں: جاوا قطار انٹرفیس اور اس کے نفاذ

ڈیک کی خصوصیات

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

ڈیک جاوا انٹرفیس کا اعلان

public interface Deque<E> extends Queue<E>

جاوا ڈیک کے طریقے

java.util.Deque ایک انٹرفیس ہے جو جاوا کیو انٹرفیس کو بڑھاتا ہے اور ایک ڈبل اینڈڈ قطار کی نمائندگی کرتا ہے۔ لہذا آپ ڈیک کے ساتھ کام کرتے ہوئے جاوا قطار کے تمام طریقے استعمال کرسکتے ہیں۔ ڈیک اسٹیک انٹرفیس میں توسیع نہ کرنے کے باوجود، ڈیک انٹرفیس ایسے طریقوں کی وضاحت کرتا ہے جو آپ کو عام اسٹیک آپریشنز جیسے push ، peek اور pop کرنے کے قابل بناتے ہیں ۔
  • بولین ایڈ(عنصر) ڈیک کی دم میں ایک عنصر کا اضافہ کرتا ہے۔ کامیابی پر صحیح لوٹتا ہے، اگر فی الحال کوئی جگہ دستیاب نہیں ہے تو ایک IllegalStateException پھینک دیتا ہے۔
  • addFirst(عنصر) Deque کے سر میں ایک عنصر شامل کرتا ہے۔
  • addLast(عنصر) Deque کی دم میں ایک عنصر شامل کرتا ہے۔
  • پیشکش (عنصر) ٹیل میں ایک عنصر شامل کرتا ہے اور یہ بتانے کے لیے بولین لوٹاتا ہے کہ آیا اندراج کامیاب رہا ہے۔
  • offerFirst(عنصر) سر میں ایک عنصر جوڑتا ہے اور یہ بتانے کے لیے بولین لوٹاتا ہے کہ آیا اندراج کامیاب رہا ہے۔
  • offerLast(عنصر) ٹیل میں ایک عنصر شامل کرتا ہے اور یہ بتانے کے لیے بولین لوٹاتا ہے کہ آیا اندراج کامیاب رہا ہے۔
  • iterator() deque کے لئے ایک تکرار کرنے والا واپس کرتا ہے۔
  • descendingIterator() ایک تکرار کرنے والا لوٹاتا ہے جس میں اس ڈیک کے لیے الٹا ترتیب ہے۔
  • push(عنصر) سر میں ایک عنصر شامل کرتا ہے۔
  • پاپ (عنصر) ایک عنصر کو سر سے ہٹاتا ہے اور اسے واپس کرتا ہے۔
  • removeFirst() عنصر کو سر سے ہٹاتا ہے۔
  • removeLast() دم پر عنصر کو ہٹاتا ہے۔
  • poll() اس ڈیک (دوسرے لفظوں میں، اس ڈیک کا پہلا عنصر) کی نمائندگی کرنے والی قطار کے سر کو بازیافت کرتا ہے اور ہٹاتا ہے، یا اگر یہ ڈیک خالی ہے تو null لوٹاتا ہے۔
  • pollFirst() اس ڈیک کے پہلے عنصر کو بازیافت اور ہٹاتا ہے، یا اگر یہ ڈیک خالی ہے تو null لوٹاتا ہے۔
  • pollLast() اس ڈیک کے آخری عنصر کو بازیافت کرتا ہے اور اسے ہٹاتا ہے، یا اگر یہ ڈیک خالی ہے تو null لوٹاتا ہے۔
  • peek() دوبارہ حاصل کرتا ہے، لیکن ہٹاتا نہیں، اس ڈیک کے ذریعہ نمائندگی کی گئی قطار کا سر (دوسرے لفظوں میں، اس ڈیک کا پہلا عنصر)، یا اگر یہ ڈیک خالی ہے تو null لوٹاتا ہے۔
  • peekFirst() اس ڈیک کے پہلے عنصر کو بازیافت کرتا ہے، لیکن ہٹاتا نہیں ہے، یا اگر یہ ڈیک خالی ہے تو null لوٹاتا ہے۔
  • peekLast() اس ڈیک کے آخری عنصر کو بازیافت کرتا ہے، لیکن ہٹاتا نہیں ہے، یا اگر یہ ڈیک خالی ہے تو null لوٹاتا ہے۔
یہاں نیچے دیے گئے جدول میں تمام طریقوں کو گروپس میں تقسیم کیا گیا ہے۔ جیسا کہ آپ دیکھ سکتے ہیں کہ عنصر کو شامل کرنے اور ہٹانے کے بہت سے مختلف طریقے ہیں۔ مثال کے طور پر، دونوں removeFirst() اور pop() deque سے پہلے عنصر کو ہٹاتے ہیں۔ دوسرا اسٹیک سے "آیا"۔ اس کا مطلب ہے کہ اگر آپ اپنے ArrayDeque کو صرف اسٹیک کے طور پر استعمال کرتے ہیں، تو pop() کو ہٹانے کے لیے، push() کو شامل کرنے کے لیے اور peek() کو جانچنے کے لیے استعمال کریں۔ یہ آپ کے کوڈ کو دوسرے ڈویلپرز کے لیے زیادہ سمجھدار بناتا ہے۔
پہلا عنصر (سر) آخری عنصر (دم)
آپریشن استثنیٰ پھینکتا ہے۔ خاص قدر استثنیٰ پھینکتا ہے۔ خاص قدر
اندراج ایڈ فرسٹ(ای)/پش(ای) پیشکش فرسٹ(ای) آخری (ای) شامل کریں پیشکش آخری()
دور ہٹا دیں فرسٹ()/پاپ() پول فرسٹ() آخری ہٹائیں() رائے شماری آخری()
پرکھنا GetFirst() جھانکنے کی پہلی ()/ جھانکنا () getLast() جھانکنے کا آخری()

ڈیک نفاذ

جاوا ڈیک ایک انٹرفیس ہے اور جاوا کلیکشن API میں اس کے نفاذ ہیں:
  • java.util.LinkedList //List اور Deque نفاذ
  • java.util.ArrayDeque //Deque نفاذ، جاوا لائبریری
جاوا ڈیک انٹرفیس - 5لنکڈ لسٹ کلاس قطار یا ڈیک کو ماڈل کرنے کے لیے اندرونی طور پر ڈبل لنکڈ لسٹ کا استعمال کرتی ہے۔ ArrayDeque کلاس عناصر کو اندرونی طور پر ایک صف میں محفوظ کرتی ہے۔ اگر عناصر کی تعداد صف کے حجم سے زیادہ ہے تو، ایک نئی صف مختص کی جاتی ہے، اور تمام عناصر کو منتقل کر دیا جاتا ہے۔ اس کا مطلب ہے کہ ArrayDeque ضروریات کے مطابق بڑھتا ہے۔

ArrayDeque کلاس

ArrayDeque <E> کلاس ایک عام دو دشاتمک قطار ہے، جو Abstract Collection کلاس سے فعالیت کو وراثت میں حاصل کرتی ہے اور Deque انٹرفیس کا استعمال کرتی ہے۔ ArrayDeque deque اور resizable-array کو استعمال کرنے کی سہولت فراہم کرتا ہے۔ ابتدائی طور پر، ارے کو سائز 16 کے ساتھ شروع کیا جاتا ہے۔ اسے دو طرفہ قطار کے طور پر لاگو کیا جاتا ہے، جہاں یہ دو پوائنٹرز، یعنی سر اور دم کو سپورٹ کرتا ہے۔ یہ Abstract Collection کلاس کا وارث ہے اور Deque انٹرفیس کو لاگو کرتا ہے۔ ArrayDeque کلاس کے بارے میں اہم نکات یہ ہیں:
  • آپ ٹیل اور ArrayDeque کے سر سے عناصر کو شامل یا ہٹا سکتے ہیں۔
  • کالعدم عناصر کی اجازت نہیں ہے۔
  • بیرونی مطابقت پذیری کی عدم موجودگی میں، ArrayDeque تھریڈ محفوظ نہیں ہے۔
  • ArrayDeque میں صلاحیت کی کوئی پابندی نہیں ہے۔

ArrayDeque کلاس کنسٹرکٹرز

  • ArrayDeque() ایک خالی قطار بناتا ہے۔
  • ArrayDeque (مجموعہ <؟ E> مجموعہ کو بڑھاتا ہے) مجموعہ مجموعہ عناصر سے بھری ہوئی قطار بناتا ہے۔
  • ArrayDeque (int گنجائش) ابتدائی صلاحیت کی گنجائش کے ساتھ ایک قطار بناتا ہے ۔ اگر آپ ابتدائی صلاحیت کی وضاحت نہیں کرتے ہیں، تو پہلے سے طے شدہ صلاحیت 16 ہے۔

جاوا ڈیک مثال - ArrayDeque

مضمون کے آغاز سے لیگو ٹاور کی مثال یاد ہے؟ آئیے لیگو اینٹوں سے بنے ایک کالم ٹاورز بنانے کے لیے ایک کلاس بنائیں۔ اینٹیں سرخ، پیلے یا نیلے رنگ کی ہو سکتی ہیں۔ ٹاور بنانے کا ہمارا اصول: ہم سرخ اینٹوں کو نیچے اور پیلی اینٹوں کو اوپر رکھتے ہیں۔ بڑی جاوا ڈیک مثال
//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 کلاس کے ڈرا ٹاور طریقہ کو تبدیل کر سکتے ہیں۔ یہ بہت آسان کام ہے!

لنکڈ لسٹ

فہرست انٹرفیس اشیاء کو شامل کرنے کی ترتیب کو برقرار رکھتا ہے اور انڈیکس کے ذریعہ آئٹم تک رسائی کی اجازت دیتا ہے۔ Deque ایک دو طرفہ قطار ہے، اور یہ دونوں اطراف سے عناصر کو شامل کرنے اور ہٹانے میں معاون ہے۔ جاوا ڈیک انٹرفیس - 6لنکڈ لسٹ کو بنیادی طور پر فہرست کے نفاذ کے طور پر جانا جاتا ہے، لیکن یہ کلاس ڈیک کو بھی نافذ کرتی ہے، اور یہ ہمیں ایک دو طرفہ قطار بنانے کی اجازت دیتی ہے جس میں null سمیت کسی بھی چیز پر مشتمل ہو۔ LinkedList عناصر کا مجموعہ ہے۔ ہم اسے کلاس کے کوڈ سورس میں دیکھ سکتے ہیں، اس بار فیلڈز پر توجہ دیں: یہاں ہم ایک مثال شامل کرتے ہیں، لیکن اگر آپ LinkedList کے بارے میں مزید جاننا چاہتے ہیں، تو اس CodeGym مضمون میں خوش آمدید ۔

جاوا میں لنکڈ لسٹ کا نفاذ، عناصر کو شامل کرنا اور ہٹانا۔ مثال

آئیے ان کارروائیوں کو عملی طور پر آزماتے ہیں۔ سب سے پہلے، جاوا لنکڈ لسٹ کا نفاذ: سٹرنگز کی ایک لنکڈ لسٹ بنانا، وہاں 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