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 開始
編寫 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時,您不會刪除其中的任何元素。迭代本質上允許您按順序查看堆棧中的每個元素。執行此操作時,您可以查找某些元素所在的位置,然後遍歷並操作它們。如果需要,您可以計算、刪除甚至更改它們。
GO TO FULL VERSION