Java API 之 Stack<E>類
阿新 • • 發佈:2018-12-21
一、簡介
Stack<E>類在Java.util包下,作為一種後進先出(LIFO)的資料結構,是一種比較簡單好用的資料結構。
JVM的棧空間結構,以及方法呼叫的時候如何在棧中進行入棧、出棧都使得我們需要去了解棧是什麼樣的,以及如何簡單地使用它。如圖:
棧結構就像是一個豎形容器一樣,入棧的時候從棧頂向下壓入棧幀,出棧的時候也是從棧頂移除資料。
二、程式碼示例
Stack類擴充套件了Vector,而Vector在程式碼實現的時候採用了很多synchronized同步鎖來控制併發問題,兩者都是執行緒安全的。
Stack主要擴充套件了五個方法:
1)push:壓入棧
2)pop:從棧頂移除,如果棧為空,丟擲異常
3)empty:判斷棧是否為空
4)peek:檢視棧頂的元素,如果棧為空,那麼丟擲異常
5)search:搜尋指定元素,如果搜尋不到返回-1,否則返回1
import java.util.Stack; public class StackDemo { public static void main(String[] args) { Stack<String> taskStack = new Stack<>(); // push taskStack.push("stackFrame1"); taskStack.push("stackFrame2"); taskStack.push("stackFrame3"); taskStack.push("stackFrame4"); System.out.println(taskStack); // pop taskStack.pop(); taskStack.pop(); taskStack.pop(); System.out.println(taskStack); taskStack.pop();// 如果為空,pop()方法會丟擲異常 if (!taskStack.empty()) { taskStack.pop(); } else { System.out.println("stack empty"); } // push taskStack.push("stackFrame5"); // peek System.out.println(taskStack.peek()); // search System.out.println(taskStack.search("stackFrame5")); System.out.println(taskStack.search("stackFrame6")); } }