1.提供一組棧的介面,其底層關聯到一個LinkedList(雙端佇列)例項。由於只暴露部分基於棧實現的介面,所以可以提供安全的棧實現。
import java.util.LinkedList;
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 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();
}
}
2.使用java.util.Queue介面,其底層關聯到一個LinkedList(雙端佇列)例項。由於只暴露部分基於佇列實現的介面,所以可以提供安全的佇列實現。
import java.util.LinkedList;
import java.util.Queue;
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();
}
}
import java.util.Queue;
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();
}
}
本文轉自zhangjunhd51CTO部落格,原文連結:http://blog.51cto.com/zhangjunhd/69912,如需轉載請自行聯絡原作者