ArrayDeque浅析

一句话简介

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 则表示数组首尾相交了,那么表示数组满了。这时候就可以对数据进行扩容了,其它函数逻辑类似,就不一一列举了。

你可能感兴趣的:(ArrayDeque浅析)