ArrayQueue的实现
package honbaa_queue;
import java.util.Arrays;
import java.util.Iterator;
public class ArrayQueue<T> implements Queue<T>,Iterable<T>{
private T[] container;
private int head;//指向对头元素
private int tail;//指向队尾元素
private final int DEFAULT_CAPACITY=10;
private final int INCREMENT=10;
public ArrayQueue() {
container = (T[])new Object[DEFAULT_CAPACITY];
head = -1;//由于数组中没有对象
tail = -1;
}
@Override
public void enQueue(T element) {
if(size()==container.length)
expandCapacity();
//放心的入队
container[tail+1]=element;
//改变tail指针
tail++;
//改变head,头只在0位置
head = 0;
}
private void expandCapacity() {
container = Arrays.copyOf(container, DEFAULT_CAPACITY+INCREMENT);
}
@Override
public T outQueue() {
//判空
if(isEmpty())
try {
throw new Exception("the queueis emtpy!");
} catch (Exception e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
//放心出队,然后后面的元素向前移动
T out = container[head];
//移动
for(int i=1;i<=tail;i++)
container[i-1] = container[i];
//tail减1,head还是0
tail--;
return out;
}
@Override
public int size() {
if(tail==head && head==-1)
return 0;
else
return tail-head+1;
}
@Override
public boolean isEmpty() {
if(size()==0)
return true;
else
return false;
}
@Override
public Iterator<T> iterator() {
return new ArrayQueueIterator();
}
private class ArrayQueueIterator<T> implementsIterator<T>{
//从对头遍历到队尾
private int currentPos=-1;
@Override
public boolean hasNext() {
if(currentPos < tail)//如果当前位置小于tail那一定还有下一个啊
return true;
else
return false;
}
@Override
public T next() {
currentPos++;
return (T) container[currentPos];
}
}
public StringtoString(){
StringBuilder sb =new StringBuilder();
Iterator it = iterator();
while(it.hasNext())
sb.append(it.next()+" ");
return sb.toString();
}
}