一句话简介
Java jdk提供的一个高效的数组循环队列
优点
1:使用循环队列可以充分利用空间
2:使用位运算提升了运算速度
属性分析
Object[] elements //数据储存数组 注意他的大小为2的倍数,为了方便下面的位运算
head //队列头部位置
tail //队列的尾部位置
MIN_INITIAL_CAPACITY //数据的初始化容量
重点函数分析
//添加函数
public void addLast(E e) {
if (e ==null)
throw new NullPointerException();
elements[tail] = e;
if ( (tail = (tail +1) & (elements.length -1)) ==head)
doubleCapacity();
}
主要逻辑是判断是否数组满了->(tail = (tail +1) & (elements.length -1)) ==head
首先将尾部位置加一,同时与数组长度进行&运算,这里注意因为数组的长度都是2的倍数,那么elements.length -1的二进制则必定全是1,那么(tail +1)和它进行&运算的话则有两种情况,一种当(tail +1) == elements.length的时候返回值等于0,一种是(tail +1) < elements.length 返回值等于(tail +1),如果等于0的话,则将队列的tail位置从最后移到了最前面可以继续添加了,计算完之后如果tail == head 则表示数组首尾相交了,那么表示数组满了。这时候就可以对数据进行扩容了,其它函数逻辑类似,就不一一列举了。