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;
}
public void resize(int 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;
}
@Override
public Iterator<Item> iterator() {
return new ReverseArrayIterator();
}
private class ReverseArrayIterator implements Iterator<Item>{
private int i = N;
@Override
public boolean hasNext() {
return i > 0;
}
@Override
public Item next() {
return a[--i];
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
}
实现Iterable接口,这样就可以使用foreach方法了,内部类实现迭代方法,stack有加入和弹出的方法,因为要实现动态数组,需要实现resize()方法。使用数组来组织类型,