CodeGym /Java Blog /Toto sisi /Java Stack 101:深入 Stack 類
John Squirrels
等級 41
San Francisco

Java Stack 101:深入 Stack 類

在 Toto sisi 群組發布
Java 中的堆棧是一種數據結構,很像隊列、數組、鍊錶或樹它與其他堆棧的不同之處在於,Java堆棧基於後進先出 (LIFO) 原則。這意味著當您使用這兩個命令從堆棧中添加和刪除一個元素時,您刪除的第一個將始終是您添加的最後一個。讓我們仔細看看 Java Stack

探索 Java 堆棧類

Java Stack類是Vector類的擴展,它本身擴展了List類。因為向量是可變的並且可以隨著內部元素的需求而增長和收縮,所以Stack也可以根據需要改變大小。Vector類的擴展添加了五個將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:深入研究 Stack 類 - 1

編寫 Java 堆棧示例

現在我們知道Stack的功能,讓我們編寫一個 Java 堆棧示例。Stack對於處理必須臨時存儲和快速檢索的數據非常有用。因為Stack是 LIFO,所以在探索樹數據結構時它對於節點遍歷非常有用。在我們進入所有這些之前,讓我們創建一個基本堆棧。實現棧的代碼如下:

import java.util.*;

class Main {
  public static void main(String[] args) {
    Stack<Integer> stackExample = new Stack<Integer>();
這就是創建空Stack 所需要做的全部工作。您也可以只聲明它而不聲明數據類型,方法是:

Stack example = new Stack();
請記住,因為Stack是可變的,當我們將元素壓入堆棧時,它會自動調整大小。現在讓我們看看如何使用Stack函數。

Java 堆棧實現

讓我們看看如何使用我們之前簡要探討過的五種方法。如果將 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()函數與前提條件 while 循環結合使用,以彈出Stack中的所有元素。看看這個java棧實現是怎麼做的。

while(!stackExample.isEmpty()) {      
  System.out.println(stackExample.pop());
}
輸出

10
5

窺視

我們可以使用.peek()作為 Java 中的堆棧實現來查看堆棧中的下一項而不刪除它。

System.out.println(stackExample.peek());
輸出

10
如果我們彈出並打印堆棧,它將返回 10 和 5,因為 10 仍在堆棧中。我們只是看了一下,並沒有用pop函數去掉。peek 函數是java 中Stack的一個很好的工具。

搜索

如果我們想找到一個特定的元素,Java 中的堆棧實現使用.search(e); 找到它。

System.out.println(stackExample.search(5));
輸出

2
請記住,這是因為我們從Stack 的頂部開始計數,而 Java Stack從 1 開始,而不是像Array那樣從 0 開始。所以,看看堆棧,它是 (10) --> (5),5 在第 2 個位置。如果您嘗試查找不在Stack中的元素,您將得到 -1 作為輸出。

迭代

在處理任何集合時,有時您可能需要查找多個元素。為了節省複雜性和不必多次搜索堆棧,您可以使用迭代。由於Java 中的Stack擴展了List類,因此有多種迭代選項。最簡單的方法之一是只使用ListIterator函數。ListIterator很好,因為它允許您使用.hasPrevious().hasNext()從上到下或從下到上遍歷Stack。這是它的樣子:

ListIterator<Integer> exampleIterator = stackExample.listIterator(stackExample.size());

  while (exampleIterator.hasPrevious()) {
    int iteration = exampleIterator.previous();
    System.out.println(iteration);
  }
輸出

10
5
請記住,當您在 Java 中迭代Stack時,您不會刪除其中的任何元素。迭代本質上允許您按順序查看堆棧中的每個元素。執行此操作時,您可以查找某些元素所在的位置,然後遍歷並操作它們。如果需要,您可以計算、刪除甚至更改它們。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION