Princedon 的 「Algorithms」公開課中講到寫一個存放字符串的棧,有一種實現是棧的大小隨着元素的增長不斷變大,採起的策略和 C++ 的 STL 同樣,讓棧以如今大小的 2 倍增加。code
public class ResizingStackOfStrings { private String[] s; private int N = 0; public ResizingStackOfStrings() { s = new String[1]; } public boolean isEmpty() { return N == 0; } public void push(String item) { if ( N == s.length) resize(2 * s.length); s[N++] = item; } public String pop() { String item = s[--N]; s[N] = null; if (N > 0 && N == s.length/4) resize(s.length/2); return item; } public void resize(int capacity) { String [] copy = new String[capacity]; for (int i = 0; i < N; i++) copy[i] = s[i]; s = copy; } public static void main(String[] args) { ResizingStackOfStrings stack = new ResizingStackOfStrings(); stack.push("lindaiyu"); stack.push("hongloumeng"); stack.push("jiabaoyu"); System.out.println(stack.pop()); } }