zoukankan      html  css  js  c++  java
  • 【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()
    
  • 相关阅读:
    语义web服务发现实验框架
    Shiro的标签说明
    oj2694 逆波兰表达式
    poj1164 The Castle
    poj1161 Walls
    nyoj19 擅长排列的小明
    poj1664 放苹果
    nyoj236 心急的C小加
    oj2755 神奇的口袋
    poj1979 Red and Black
  • 原文地址:https://www.cnblogs.com/yickel/p/14794572.html
Copyright © 2011-2022 走看看