CodeGym /בלוג Java /Random-HE /Java Stack 101: התעמקות בכיתה מחסנית
John Squirrels
רָמָה
San Francisco

Java Stack 101: התעמקות בכיתה מחסנית

פורסם בקבוצה
המחסנית ב-Java היא מבנה נתונים, בדומה לתור, מערך, רשימה מקושרת או עץ . המקום שבו הוא שונה מהאחרים הוא ש-Java Stack מבוסס על עקרון Last In, First Out (LIFO). המשמעות היא שכאשר אתה משתמש בשתי הפקודות כדי להוסיף ולהסיר אלמנט מהמחסנית, הראשון שתסיר תמיד יהיה האחרון שהוספת. בואו נסתכל מקרוב על מחלקת Java Stack

חקירת מחלקת Java Stack

מחלקת ה-Java Stack היא הרחבה של מחלקת Vector , שבעצמה מרחיבה את המחלקה List . מכיוון שווקטורים ניתנים לשינוי ויכולים לגדול ולהצטמצם עם הדרישות של האלמנטים בפנים, סטאק s יכול גם לשנות גדלים לפי דרישה. ההרחבה של המחלקה Vector מוסיפה חמש פעולות שהופכות וקטור ל- Stack . חמשת הפעולות הללו הן:
  • .push(E item) - מציב אלמנט על החלק העליון של הערימה
  • .pop() - מסיר את האלמנט בחלק העליון של המחסנית ומחזיר אותו כערך הפונקציה
  • .peek() - מסתכל על האלמנט בחלק העליון של הערימה מבלי להסיר אותו
  • .empty() - פונקציה בוליאנית כדי לבדוק אם המחסנית ריקה או לא. מחזירה 0 או 1.
  • .search(Object o) - מחפש o ומחזיר את מיקומו. הערך הוא מבוסס 1, לא מבוסס 0
Stack יורשת גם את כל השיטות שהן חלק מ- Vector , כולל אך לא רק, toString() , contains() , indexOf() ו- lastElement() . Java Stack 101: התעמקות בכיתה מחסנית - 1

קידוד ערימת Java דוגמה

עכשיו כשאנחנו מכירים את הפונקציות של Stack , בואו נקודד דוגמה לחסימה של Java. ערימות שימושיות מאוד לטיפול בנתונים שיש לאחסן באופן זמני ולאחזר במהירות. מכיוון שה- Stack הוא LIFO, הוא שימושי במיוחד עבור מעבר צומת בעת חקירת מבנה נתוני עץ. לפני שניכנס לכל זה, בואו ניצור מחסנית בסיסית. הקוד ליישום מחסנית הוא כדלקמן:
import java.util.*;

class Main {
  public static void main(String[] args) {
    Stack<Integer> stackExample = new Stack<Integer>();
זה כל מה שאתה צריך לעשות כדי ליצור מחסנית ריקה . אתה יכול גם פשוט להכריז עליו בפשטות מבלי להכריז על סוג נתונים באמצעות:
Stack example = new Stack();
זכור שבגלל ש- Stack s ניתנים לשינוי, כאשר אנו דוחפים אלמנטים אל המחסנית, הוא יתכוונן אוטומטית בגודל. עכשיו בואו נסתכל כיצד להשתמש בפונקציות Stack .

יישום Java Stack

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

לִדחוֹף

// pushing integers onto the Stack
    stackExample.push(5);
    stackExample.push(10);
בשלב זה, אנו הולכים להראות את הפונקציות האחרות כאילו דחפנו את שני המספרים השלמים הללו אל דוגמה המחסנית של Java בכל פעם.

פּוֹפּ

//popping integers off of the Stack
System.out.println(stackExample.pop());
System.out.println(stackExample.pop());
תְפוּקָה:

10
5

זה ריק

עכשיו, נניח שאתה רוצה להסיר את כל האלמנטים מ- Stack אבל אתה לא בטוח כמה אלמנטים יש. אתה יכול לשלב את הפונקציה Boolean.isEmpty() עם תנאי מקדים בעוד לולאה כדי לפוצץ את כל האלמנטים מה- Stack . תראה איך יישום מחסנית Java זה מתבצע.
while(!stackExample.isEmpty()) {
  System.out.println(stackExample.pop());
}
תְפוּקָה

10
5

לְהָצִיץ

אנו יכולים להשתמש ב-.peek() כיישום מחסנית ב-Java כדי להסתכל על הפריט הבא ב- Stack מבלי להסיר אותו.
System.out.println(stackExample.peek());
תְפוּקָה

10
אם נקפוץ ונדפיס את המחסנית , היא תחזיר 10 ו-5 כי ה-10 עדיין על הערימה. רק הסתכלנו על זה, לא הסרנו אותו עם פונקציית הפופ. פונקציית ההצצה היא כלי נהדר עבור Stack s ב-Java.

לחפש

אם אנחנו רוצים למצוא אלמנט מסוים, יישום הערימות ב-Java משתמש ב-.search(e); למצוא את זה.
System.out.println(stackExample.search(5));
תְפוּקָה

2
זכור שזה בגלל שאנו סופרים מהחלק העליון של המחסנית ו-Java Stack מתחילים ב-1, לא ב-0 כמו מערך . אז, בהסתכלות על הערימה, היא (10) --> (5), ו-5 נמצא במקום מספר 2. אם תנסה למצוא אלמנט שאינו ב- Stack , תקבל -1 כפלט.

איטרציה

כאשר עובדים עם כל אוסף, עשויים להיות מקרים שבהם אתה צריך לחפש אלמנטים מרובים. כדי לחסוך במורכבות ובצורך לחפש במחסנית מספר פעמים, אתה יכול להשתמש באיטרציה. מכיוון ש- Stack ב-Java מרחיב את המחלקה List , ישנן מספר אפשרויות לאיטרציה. אחד הקלים ביותר הוא פשוט להשתמש בפונקציה ListIterator . ListIterator נחמד בכך שהוא מאפשר לך לעבור מחסנית מלמעלה למטה או מלמטה למעלה באמצעות .hasPrevious() או .hasNext() . כך זה נראה:
ListIterator<Integer> exampleIterator = stackExample.listIterator(stackExample.size());

  while (exampleIterator.hasPrevious()) {
    int iteration = exampleIterator.previous();
    System.out.println(iteration);
  }
תְפוּקָה

10
5
זכור שכאשר אתה חוזר על Stack s ב-Java, אתה לא מסיר שום אלמנט בו. איטרציה בעצם מאפשרת לך להציץ בכל אלמנט בערימה לפי הסדר. כאשר אתה עושה זאת, אתה יכול לחפש מיקומים שבהם נמצאים אלמנטים מסוימים ואז לעבור ולתפעל אותם. אתה יכול לספור, למחוק או אפילו לשנות אותם במידת הצורך.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION