Java Collections Framework 已內建 Stack<E>,但為了理解泛型與資料結構原理,自行實作一個基於 LinkedList 的堆疊是很好的練習。本文展示如何使用泛型 <T> 建立一個簡單的 Stack<T> 類別。
package cn.edu.xidian.crytoll;
import java.util.LinkedList;
public class Stack<T> {
private LinkedList<T> container = new LinkedList<>();
public void push(T t) {
container.addFirst(t);
}
public T pop() {
return container.removeFirst();
}
public boolean empty() {
return container.isEmpty();
}
}
使用 LinkedList 的 addFirst 與 removeFirst 即可達成 LIFO(後進先出)語意。
package cn.edu.xidian.crytoll;
public class StackTest {
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
System.out.println("向堆疊加入字串:");
stack.push("視頻學Java");
stack.push("細說Java");
stack.push("Java從入門到精通(第2版)");
System.out.println("從堆疊取出字串:");
while (!stack.empty()) {
System.out.println(stack.pop());
}
}
}
向堆疊加入字串: 視頻學Java 細說Java Java從入門到精通(第2版) 從堆疊取出字串: Java從入門到精通(第2版) 細說Java 視頻學Java
<T> 讓堆疊可儲存任意型別,編譯期型別安全。LinkedList 實作,程式碼簡潔。peek()、size() 等方法。