思想:添加元素时,数组尾部添加;获取元素时从数组头部获取
package ds;
public class MyArrQueue<E> {
private Object[] queue;
private int head;
private int tail;
private int size;
private static final int maxSize = 1 << 30;
private int capacity;
public MyArrQueue(int initCap) {
if (initCap > maxSize) {
throw new OutOfMemoryError("initCap is too large");
}
if (initCap <= 0) {
throw new IndexOutOfBoundsException("initCap must be more than zero");
}
queue = new Object[initCap];
this.capacity = initCap;
head = tail = -1;
size = 0;
}
public MyArrQueue() {
queue = new Object[16];
head = tail = -1;
size = 0;
}
//往尾部添加元素
public void offer(E e) {
if (size >= capacity) {
throw new RuntimeException("queue's size more than or equal to array's capacity");
}
queue[++tail] = e;
size++;
}
//从头部获取数据
public E poll() {
if (size <= 0) {
throw new RuntimeException(" the queue's empty");
}
E ret = (E) queue[++head];
queue[head] = null;
size--;
return ret;
}
//查看第一个元素
public E peek() {
return (E) queue[head];
}
//清空队列
public void clear() {
for (int i = 0; i < queue.length; i++) {
queue[i] = null;
}
head = tail = 0;
size = 0;
}
}