کالکشن ها در جاوا: معرفی و استفاده از ArrayDeque + مثال

کالکشن ها در جاوا: معرفی و استفاده از ArrayDeque + مثال

معرفی ArrayDeque

کلاس ArrayDeque یک پیاده سازی رسمی در جاواست، که حذف و اضافه کردن عناصر در هر دو طرف لیست رو امکان پذیر میکنه.

بر خلاف LinkedList که هر عنصر داخل یک گره (Node) ذخیره میشه، در ArrayDeque مانند ArrayList عناصر مستقیم روی حافظه ذخیره میشن؛ بنابراین به لحاظ مصرف حافظه نسبت به LinkedList موثر تر عمل میکنه.

از ArrayDeque میتونیم هم به عنوان پشته (Stack) استفاده کنیم و هم به عنوان صف (Queue)؛ هنگامی که بخوایم از ArrayDeque به عنوان Stack استفاده کنیم از کلاس Stack سریع تره و هنگامی که بخوایم از ArrayDeque به عنوان صف (Queue) استفاده کنیم، از Queue با LinkedList نیز سریع تر خواهد بود.

زمانی که نیاز به دسترسی تصادفی با index یا ListIterator نداشته باشیم، استفاده از ArrayDeque مناسب تر از LinkedList است.

پیچیدگی زمان حذف کردن، اضافه کردن یا صدا زدن عناصر در ArrayDeque در شرایط amortized برابر با O(1) است.

استفاده از ArrayDeque

تمام متد های ArrayDeque در اینترفیس Deque تعریف و در ArrayDeque پیاده‌سازی شدن؛ در واقع کلاس ArrayDeque یک پیاده‌سازی از Deque است.

در نمودار UML زیر سلسله مراتب ارث‌بری کلاس ArrayDeque شرح داده شده است.

سلسله مراتب ارث‌بری کلاس ‌ArrayDeque در جاوا
سلسله مراتب ارث‌بری کلاس ‌ArrayDeque در جاوا

اینترفیس List در کلاس ArrayDeque پیاده نشده بنابراین کلاس ArrayDeque فقط از Iterator پشتیبانی می کنه و از ListIterator پشتیبانی نمیکنه.

در نمودار UML زیر کانستراکتور های کلاس ArrayDeque

java.util.ArrayDeque
+ArrayDeque() یک نمونه از ArrayDeque ایجاد میکنه.
+ArrayDeque(numOfElements: int) یک نمونه از ArrayDeque با ظرفیت (capacity) اولیه ایجاد میکنه.
+ArrayDeque(c: Collection<? extends E>) یک نمونه از ArrayDeque ایجاد میکنه و عناصر کالکشن c رو بهش اضافه میکنه.

در مثال زیر میخوایم از متد های گفته شده در Deque استفاده کنیم.

ArrayDeque<String> arrayDeque = new ArrayDeque<>();
arrayDeque.addLast("Blue");
arrayDeque.addLast("Pink");
arrayDeque.addLast("Purple");
arrayDeque.addFirst("Cyan");
arrayDeque.addLast("Red");

System.out.println("Last element is " + deque.peek());

arrayDeque.removeLast();
arrayDeque.addLast("Yellow");

System.out.println("Remove and Display colors backward: ");

while(!arrayDeque.isEmpty()){
  String c = arrayDeque.removeLast();
  System.out.println(c);
  
}
        

استفاده از ArrayDeque به عنوان Stack

در موضوع کار با Stack در مورد ويژگی های Stack توضیح دادیم و در اونجا از کلاس Stack استفاده می کردیم، با استفاده از متد های ArrayDeque که در Deque تعریف شدن میتونیم از ArrayDeque به عنوان Stack استفاده کنیم.

Deque<String> stack = new ArrayDeque<>();

stack.push("Tehran");
stack.push("Arak");
stack.push("Isfahan");
stack.push("Tabriz");
stack.push("Mashhad");

System.out.println("Displaying queue: ");

while(!stack.isEmpty())
   System.out.print(queue.pop() + " ");

System.out.println();
          

استفاده از ArrayDeque به عنوان Queue

در موضوع کار با Queue در مورد ویژگی های Queue توضیح دادیم، با توجه به اینکه ArrayDeque متد های اینترفیس Queue رو پیاده‌سازی میکنه بنابراین میتونیم از ArrayDeque به عنوان Queue نیز استفاده کنیم.

در مثال زیر عناصر رو داخل Queue ذخیره میکنیم و سپس دونه حذف و صداشون میکنیم.

Queue<String> queue = new ArrayDeque<>();

queue.offer("Tehran");
queue.offer("Arak");
queue.offer("Isfahan");
queue.offer("Tabriz");
queue.offer("Mashhad");

System.out.println("Displaying cities in queue: ");

while(!queue.isEmpty())
   System.out.print(queue.poll() + " ");

System.out.println();         
          

خلاصه

  • با استفاده ArrayDeque میتونیم عناصر رو در دو طرف صف حذف یا اضافه کنیم.
  • اکثر متد های ArrayDeque در Deque تعریف شدن.
  • از ArrayDeque میتونیم به عنوان Queue و Stack استفاده کنیم.
  • استفاده از ArrayDeque به عنوان Stack سریع تر از کلاس Stack است.
  • استفاده از ArrayDeque به عنوان Queue سریع تر از استفاده از LinkedList به عنوان Queue است.
  • عناصر ArrayDeque آرایه‌وار مستقیم روی حافظه ذخیره میشن.

بازخورد و دیدگاه‌ ها

اولین نفری باشید که در این صفحه نظر می‌دهید

notifications برای اطلاع از جدیدترین مطالب و پست های مرتبط، عضو کانال تلگرام ما بشید.

arrow_drop_up
کپی شد!