**
能够动态调整数组大小的实现
所有集合类抽象数据类型实现的模板
**
代码如下:
package stack;
import java.util.Iterator;
public interface Iterable<Item> {
Iterator<Item> iterator();
}
**package stack;
import java.util.Iterator;
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(a.length*2);
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()
{}
}
}**