import java.util.Iterator;
/**
* ä½¿ç¨æ°ç»å®ç°çå¯ä»¥å¨æè°æ´å¤§å°çæ
*/
public class ArrayStack- implements MyStack
- {
// æ å
ç´ æ°ç»ï¼åªè½éè¿è½¬åæ¥å建æ³åæ°ç»
private Item[] a = (Item[]) new Object[1];
// å
ç´ æ°é
private int N = 0;
@Override
public MyStack
- push(Item item) {
check();
a[N++] = item;
return this;
}
@Override
public Item pop() throws Exception {
if (isEmpty()) {
throw new Exception("stack is empty");
}
Item item = a[--N];
check();
// é¿å
对象游离
a[N] = null;
return item;
}
private void check() {
if (N >= a.length) {
resize(2 * a.length);
} else if (N > 0 && N <= a.length / 4) {
resize(a.length / 2);
}
}
/**
* è°æ´æ°ç»å¤§å°ï¼ä½¿å¾æ å
·æä¼¸ç¼©æ§
*/
private void resize(int size) {
Item[] tmp = (Item[]) new Object[size];
for (int i = 0; i < N; i++) {
tmp[i] = a[i];
}
a = tmp;
}
@Override
public boolean isEmpty() {
return N == 0;
}
@Override
public int size() {
return N;
}
@Override
public Iterator
- iterator() {
// è¿åéåºéåçè¿ä»£å¨
return new Iterator
- () {
private int i = N;
@Override
public boolean hasNext() {
return i > 0;
}
@Override
public Item next() {
return a[--i];
}
};
}
}