public class ResizingArrayStack<Item> implements Iterable<Item> { //栈元素 private Item[] a = (Item[]) new Object[1]; //元素数量 private int N = 0; public boolean isEmpty(){ return N == 0; } public int size(){ return N; } private void resize(int max){ //将站移动到一个大小为max的新数组 Item[] temp = (Item[]) new Object[max]; for(int i = 0; i < N; i++) temp[i] = a[i]; a = temp; } public void push(Item item){ //将元素调价到栈顶 if(N == a.length) resize(2 * a.length); a[N++] = item; } public Item pop(){ //从栈顶删除元素 Item item = a[--N]; a[N] = null;//避免对象游离 if(N > 0 && N == a.length/4) resize(a.length/2); return item; } public Iterator<Item> iterator(){ return new ReverseArrayIterator(); } private class ReverseArrayIterator implements Iterator<Item>{ //支持后进先出的迭代 private int i = N; public boolean hasNext(){ return i > 0; } public Item next(){ return a[--i]; } public void remove(){ } } }