【JAVA】【集合17】Java中的ArrayDeque

一、ArrayDeque定义

ArrayDeque在java.util.ArrayDeque中定义。
其实现上通过数组保存队列。如下:

public class ArrayDeque<E> extends AbstractCollection<E>
                           implements Deque<E>, Cloneable, Serializable
{
    ......
    transient Object[] elements; 
    transient int head;
    transient int tail;
    private static final int MIN_INITIAL_CAPACITY = 8;
    ......
}

注意:

  • ArrayDqueue使用数组存储实现的是一个 循环队列。所以head、tail不并不一定是数组的头和尾。

  • head为队列头元素的索引。

  • tail并不是队列尾部元素的索引,而是尾部元素的下一位。即:下一个将要被加入的元素的索引。

  • ArrayDeque空间满,默认扩容 的比例是2倍。

二、主要方法

1. 构造类方法

(1)不带参数,创建ArrayDeque默认为16个单元。

public ArrayDeque() {
        elements = new Object[16];
}

(2)指定初始长度,创建队列

public ArrayDeque(int numElements) {
        allocateElements(numElements);
}

(3)指定集合,创建队列,把集合内容放入队列

public ArrayDeque(Collection<? extends E> c) {
        allocateElements(c.size());
        addAll(c);
}

2. 向队列添加元素

(1)在队列头插入元素
注意:如果当前队列头刚好在数组的[0]位置,新插入后,实际上是插入到elements[]的末尾单元,因为是循环队列。

public void addFirst(E e)
public boolean offerFirst(E e)

(2)在队列尾插入元素

public void addLast(E e)
public boolean offerLast

3. 从队列中取元素

(1)取队列头元素后,删除队列中此元素

public E removeFirst()    //队列为空,抛出异常
public E pollFirst()      //队列为空,返回Null

(2)取队列尾元素,删除队列中此元素

public E removeLast()      //队列为空,抛出异常
public E pollLast()      //队列为空,返回Null

(3)查询队列头元素后,不删除队列中此元素

public E getFirst()    //队列为空,抛出异常
public E peekFirst()     //队列为空,返回Null

(4)查询队列尾元素,不删除队列中此元素

public E getLast()      //队列为空,抛出异常
public E peekLast()      //队列为空,返回Null

三、作为FIFO的方法

实现的Queue接口方法。默认当作先进先出(FIFIO)队列管理。进在队列尾,出在队列头。

public boolean add(E e)    //同addLast()
public boolean offer(E e)    //同offerLast()

public E remove()   //同removeFirst()
public E poll()   //同pollFirst()
public E element()  //同getFirst()
public E peek()   //同peekFirst()

四、作为LIFO

实现了ArrayDeque作为后进先出(LIFO)(栈)使用的方法。

public void push(E e)   //等同于addFirst()
public E pop()     //等同于removeFirst()
posted @ 2021-05-21 16:58  小拙  阅读(389)  评论(0编辑  收藏  举报