import java.util.Iterator;
public class QueueArrays<Item> implements Iterable{
Item[] items= (Item[]) new Object[1];
int N=0;//控制數組下標
public int size(){
return N;
}
public boolean isEmpty(){
return N==0;
}
public void resize(int max){
Item[] temps=(Item[])new Object[max];
for (int i = 0; i < N; i++) {
temps[i]=items[i];
}
items=temps;
}
public void enqueue(Item item){
items[N++]=item;
if (N==items.length) resize(items.length*2);
}
public Item dequeue(){
Item item=items[0];
this.dynamicRegulation();
N--;
if (N>0&&N<items.length/4) resize(items.length/2);
return item;
}
//每次dequeue調整item的位置
public void dynamicRegulation(){
for (int i = 0; i <items.length-1 ; i++) {
items[i]=items[i+1];
}
}
@Override
public Iterator iterator() {
return new QueueIterator();
}
private class QueueIterator implements Iterator{
int i=0;
@Override
public boolean hasNext(){
return i<=N&&items[i]!=null;
}
@Override
public Item next(){
return items[i++];
}
@Override
public void remove() {
}
}
}
//輸入示例
public class TestQueue {
public static void main(String[] args) {
QueueArrays qa = new QueueArrays();
String[] s = {"to", "be", "or", "not", "to", "-", "be", "-", "-", "that", "-", "-", "-", "is"};
for (String a : s) {
if (!a.equals("-")) {
qa.enqueue(a);
} else if (!qa.isEmpty()) {
System.out.print(qa.dequeue() + " ");
}
}
System.out.println("(" + qa.size() + "left on queue)");
}
}
結果爲