設計改進
- 使用泛型
<T> 支援任意物件型別
- 定義介面契約
SimpleStack<T> 規範行為
- 建構子支援自訂初始容量,並驗證合法性
pop() 將出棧位置設為 null,協助 GC 回收
peek() 空棧時返回 null 而非拋異常 (可依需求調整)
介面定義
public interface SimpleStack {
boolean empty();
void push(T obj);
T pop();
T peek();
}
實現類
public class MyStack implements SimpleStack {
private int depth = 0;
public static final int DEFAULT_INITIAL = 10;
private T[] stack;
public MyStack() { this(DEFAULT_INITIAL); }
public MyStack(int capacity) {
if (capacity <= 0) throw new IllegalArgumentException("容量必須為正數: " + capacity);
stack = (T[]) new Object[capacity];
}
@Override
public boolean empty() { return depth == 0; }
@Override
public void push(T obj) { stack[depth++] = obj; }
@Override
public T pop() {
--depth;
T tmp = stack[depth];
stack[depth] = null; // 釋放引用
return tmp;
}
@Override
public T peek() {
if (depth == 0) return null;
return stack[depth - 1];
}
public static void main(String[] args) {
MyStack stack = new MyStack<>();
stack.push("Frank");
stack.push("Smith");
System.out.println(stack.pop()); // Smith
}
}
測試輸出
Smith