package test01.stack;
import java.util.Iterator;
import com.sun.org.apache.bcel.internal.generic.POP;
import com.sun.org.apache.bcel.internal.generic.PUSH;
public class MyStack<T> implements Iterable<T> {
private static final int DEFAULT_SIZE=10;
private int size;
private T[] item;
private int top;
public MyStack() {
clear();
}
public void clear(){
size=0;
top=-1;
ensureCapacity(DEFAULT_SIZE);
}
public int size(){
return size;
}
public boolean isEmpty(){
return size()==0;
}
public void trumToSize(){
ensureCapacity(size());
}
public void ensureCapacity(int capacity){
if (capacity<size()) {
return;
}
T[] old=item;
item=(T[]) new Object[capacity];
if (old!=null) {
System.arraycopy(old, 0, item, 0, old.length);
}
// for (int i = 0; i <= top; i++) {
// item[i] = old[i];
// }
size=capacity;
}
public T top(){
if (size()==0) {
throw new NullPointerException();
}
return item[top];
}
public T pop(){
if (size()==0) {
throw new NullPointerException();
}
return item[top--];
}
public void push(T x){
if (top+1==size()) {
ensureCapacity(size()*2+1);
}
item[++top]=x;
}
@Override
public Iterator<T> iterator() {
// TODO Auto-generated method stub
return new StackIterator();
}
private class StackIterator implements Iterator<T>{
private int current=0;
@Override
public boolean hasNext() {
return current<=top;
}
@Override
public T next() {
if (!hasNext()) {
throw new NullPointerException();
}
return item[current++];
}
}
public static void main(String[] args) {
MyStack<Integer> stack = new MyStack<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.pop();
stack.push(4);
stack.push(5);
Iterator<Integer> iterator = stack.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
}
}