通过构造方法,我们知道默认初始容量是16
,最小容量是8
。
入队有很多方法,我们这里主要分析两个,addFirst(e)
和addLast(e)
。
队头入队
//从队列头入队
public void addFirst(E e) {
//如果为null,直接抛异常
if (e == null)
throw new NullPointerException();
//将head指针减1并与数组长度减1取模
//目的是防止数组到头了边界溢出
//如果到头了就从尾部再向前
//相当于循环利用数组
//栗子:head为0,数组长度为8.(-1&7)=(-1%8)=7
elements[head = (head - 1) & (elements.length - 1)] = e;
if (head == tail)
//如果头尾在一起了,就触发扩容
doubleCapacity();
}
队尾入队
//从队列尾入队
public void addLast(E e) {
//不允许null元素,否则抛出异常
if (e == null)
throw new NullPointerException();
//在尾指针的位置放入元素
/