معرفی 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 شرح داده شده است.
اینترفیس 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 آرایهوار مستقیم روی حافظه ذخیره میشن.
بازخورد و دیدگاه ها
اولین نفری باشید که در این صفحه نظر میدهید