1. 程式人生 > >Java API 之 Stack<E>類

Java API 之 Stack<E>類

一、簡介

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")); } }