1.提供一組棧的接口,其底層關聯到一個LinkedList(雙端隊列)實例。由於只暴露部分基於棧實現的接口,所以可以提供安全的棧實現。
package junit; import java.util.LinkedList; /** * 用LinkedList實現棧 * * 隊列和棧區別:隊列先進先出,棧先進后出。 * * @author 林計欽 * @version 1.0 Sep 5, 2013 11:24:34 PM */ public class Stack<T> { private LinkedList<T> storage = new LinkedList<T>(); /** 入棧 */ public void push(T v) { storage.addFirst(v); } /** 出棧,但不刪除 */ public T peek() { return storage.getFirst(); } /** 出棧,刪除 */ public T pop() { return storage.removeFirst(); } /** 棧是否為空 */ public boolean empty() { return storage.isEmpty(); } /** 打印棧元素 */ public String toString() { return storage.toString(); } public static void main(String[] args) { Stack stack=new Stack<String>(); stack.push("a"); stack.push("b"); stack.push("c"); //[c, b, a] System.out.println(stack.toString()); //c--[c, b, a] Object obj=stack.peek(); System.out.println(obj+"--"+stack.toString()); obj=stack.pop(); //c--[b, a] System.out.println(obj+"--"+stack.toString()); //false System.out.println(stack.empty()); } }
2.使用java.util.Queue接口,其底層關聯到一個LinkedList(雙端隊列)實例。由於只暴露部分基於隊列實現的接口,所以可以提供安全的隊列實現。
package junit; import java.util.LinkedList; import java.util.Queue; /** * 用LinkedList實現隊列 * * 隊列和棧區別:隊列先進先出,棧先進后出。 * * @author 林計欽 * @version 1.0 Sep 5, 2013 11:26:45 PM */ public class MyQueue<T> { private Queue<T> storage = new LinkedList<T>(); /** 將指定的元素插入隊尾 */ public void offer(T v) { storage.offer(v); } /** 檢索,但是不移除隊列的頭,如果此隊列為空,則返回 null */ public T peek() { return storage.peek(); } /** 檢索,但是不移除此隊列的頭 */ /** 此方法與 peek 方法的惟一不同是,如果此隊列為空,它會拋出一個異常 */ public T element() { return storage.element(); } /** 檢索並移除此隊列的頭,如果隊列為空,則返回 null */ public T poll() { return storage.poll(); } /** 檢索並移除此隊列的頭 */ /** 此方法與 poll 方法的不同在於,如果此隊列為空,它會拋出一個異常 */ public T remove() { return storage.remove(); } /** 隊列是否為空 */ public boolean empty() { return storage.isEmpty(); } /** 打印隊列元素 */ public String toString() { return storage.toString(); } public static void main(String[] args) { MyQueue stack=new MyQueue<String>(); stack.offer("a"); stack.offer("b"); stack.offer("c"); //[a, b, c] System.out.println(stack.toString()); Object obj=stack.peek(); // a--[a, b, c] System.out.println(obj+"--"+stack.toString()); obj=stack.element(); // a--[a, b, c] System.out.println(obj+"--"+stack.toString()); obj=stack.poll(); //a--[b, c] System.out.println(obj+"--"+stack.toString()); obj=stack.remove(); //b--[c] System.out.println(obj+"--"+stack.toString()); //false System.out.println(stack.empty()); } }