מבוא ל- ArrayDeque של Java

1. סקירה כללית

במדריך זה נראה כיצד להשתמש בג'אווה ArrayDeque מחלקה - שהיא יישום של דק מִמְשָׁק.

An ArrayDeque (ידוע גם בשם "תור מערך כפול הסתיים", מבוטא בשם "ArrayDeck") הוא סוג מיוחד של מערך גדל המאפשר לנו להוסיף או להסיר אלמנט משני הצדדים.

An ArrayDeque יישום יכול לשמש כ לַעֲרוֹם (האחרון בהתחלה) או א תוֹר(ראשון בהתחלה).

2. ממשק ה- API במבט חטוף

לכל פעולה יש לנו בעצם שתי אפשרויות.

הקבוצה הראשונה מורכבת משיטות המשליכות חריגה אם הפעולה נכשלת. הקבוצה האחרת מחזירה סטטוס או ערך:

מבצעשיטהזריקת שיטה חריג
הכנסה מהראשofferFirst (ה)addFirst (ה)
הרחקה מהראשpollFirst ()removeFirst ()
שליפה מהראשpeekFirst ()getFirst ()
הכנסה מזנבofferLast (ה)addLast (e)
הרחקה מהזנבpollLast ()removeLast ()
שליפה מהזנבpeekLast ()ללכת לאיבוד()

3. שימוש בשיטות

בואו נסתכל על כמה דוגמאות פשוטות כיצד אנו יכולים להשתמש ב- ArrayDeque.

3.1. באמצעות ArrayDeque כ לַעֲרוֹם

נתחיל בדוגמא כיצד אנו יכולים להתייחס לשיעור כאל לַעֲרוֹם - ודחף אלמנט:

@Test ציבורי בטל whenPush_addsAtFirst () {Deque stack = ArrayDeque חדש (); stack.push ("ראשון"); stack.push ("שנייה"); assertEquals ("שנייה", stack.getFirst ()); } 

בואו נראה גם כיצד נוכל להקפיץ אלמנט מה- ArrayDeque - כאשר משתמשים בתור ערימה:

@ מבחן ציבורי בטל כאשר Pop_removesLast () {Deque stack = ArrayDeque חדש (); stack.push ("ראשון"); stack.push ("שני"); assertEquals ("שנייה", stack.pop ()); } 

ה פּוֹפּ שיטה זורקת NoSuchElementException כאשר ערימה ריקה.

3.2. באמצעות ArrayDeque כ תוֹר

נתחיל כעת בדוגמה פשוטה המראה כיצד אנו יכולים להציע אלמנט ב- ArrayDeque - כאשר משתמשים בתור פשוט תוֹר:

@Test הציבור בטל כאשרOffer_addsAtLast () {Deque תור = ArrayDeque חדש (); queue.offer ("ראשון"); queue.offer ("שני"); assertEquals ("second", queue.getLast ()); } 

ובואו נראה איך נוכל לסקר אלמנט מ- ArrayDeque, גם כאשר משתמשים בו כ- תוֹר:

@ מבחן ציבורי בטל כאשר Poll_removesFirst () {Deque תור = ArrayDeque חדש (); queue.offer ("ראשון"); queue.offer ("שני"); assertEquals ("first", queue.poll ()); } 

ה מִשׁאָל שיטה מחזירה א ריק ערך אם התור ריק.

4. איך זה ArrayDeque מוטמע

מתחת למכסה המנוע, ה ArrayDeque מגובה במערך המכפיל את גודלו כשהוא מתמלא.

בתחילה, אתחול המערך בגודל 16. הוא מיושם כתור כפול קצה בו הוא שומר על שני מצביעים, כלומר ראש וזנב.

בואו נראה את ההיגיון הזה בפעולה - ברמה גבוהה.

4.1. ArrayDeque כסטאק

כפי שניתן לראות, כאשר משתמש מוסיף אלמנט באמצעות ה- לִדחוֹף שיטה, זה מזיז את מצביע הראש אחד.

כאשר אנו מקפיצים אלמנט, הוא מציב את האלמנט במיקום הראש כ- ריק כך שהאלמנט יכול להיות אסוף אשפה, ואז מעביר אחורה את מצביע הראש.

4.2. ArrayDeque כ תוֹר

כאשר אנו מוסיפים אלמנט באמצעות ה- הַצָעָה שיטה, זה מזיז את מצביע הזנב אחד.

בעוד שמשתמש סוקר אלמנט, הוא מגדיר את האלמנט במיקום הראש לאפס, כך שהאלמנט יכול להיות אסוף אשפה, ואז מעביר את מצביע הראש.

4.3. הערות על ArrayDeque

לסיום, כמה הערות נוספות שכדאי להבין ולהיזכר בקשר ליישום זה:

  • זה לא בטוח בחוטים
  • אלמנטים אפסיים אינם מקובלים
  • עובד מהר משמעותית מהמסונכרן לַעֲרוֹם
  • הוא תור מהיר יותר מ- רשימה מקושרת בשל יישוב ההתייחסות הטוב יותר
  • רוב הפעולות הפחיתו את מורכבות הזמן המתמדת
  • An איטרטור הוחזר על ידי ArrayDeque הוא כישלון מהיר
  • ArrayDeque מכפיל באופן אוטומטי את גודל המערך כאשר מצביע הראש והזנב נפגשים זה עם זה תוך הוספת אלמנט

5. מסקנה

במאמר קצר זה הדגמנו את השימוש בשיטות ב- ArrayDeque.

היישום של כל הדוגמאות הללו ניתן למצוא בפרויקט GitHub; זהו פרויקט מבוסס Maven, כך שיהיה קל לייבא ולהפעיל אותו כפי שהוא.


$config[zx-auto] not found$config[zx-overlay] not found