package day921;
import java.util.Iterator;
//模拟栈,实现数组的大小自动调整并实现迭代
public class ResizingArrayStack<T> implements Iterable<T> {
private T[] a = (T[]) new Object[1];
private int N = 0;
public boolean isEmpty() {
return N == 0;
}
public int size() {
return N;
}
private void resize(int max) {
T[] tmp = (T[]) new Object[max];
for (int i = 0; i < N; i++) {
tmp[i] = a[i];
a = tmp;
}
}
public void push(T t) {
if (N == a.length) {
resize(2 * a.length);
}
a[N++] = t;
}
public T pop() {
T t = a[--N];
a[N] = null;// 避免对象游离
if (N > 0 && N == a.length / 4) {
resize(a.length / 2);
}
return t;
}
public Iterator<T> iterator() {
return new ReverseArrayiterator();
}
private class ReverseArrayiterator implements Iterator<T> {
int i = N;
public boolean hasNext() {
return i > 0;
}
public T next() {
return a[--i];
}
public void remove() {
}
}
}