Java Deque和ArrayDeque

1 什么是Java Deque接口

Java Deque接口是一个线性集合,支持两端的元素插入和删除。Deque是“双端队列”的首字母缩写。

2 Java Deque接口的语法

public interface Deque<E> extends Queue<E>  

3 Java Deque接口(ArrayDeque类)的方法

方法 描述
boolean add(object) 此方法在此双端队列的末尾插入指定的元素。
void addFirst(E e) 此方法将指定的元素插入此双端队列的前面。
void addLast(E e) 此方法在此双端队列的末尾插入指定的元素。
void clear() 此方法从此双端队列中删除所有元素。
ArrayDeque<E> clone() 此方法返回此双端队列的副本。
boolean contains(Object o) 如果此双端队列包含指定的元素,则此方法返回true。
Iterator<E> descendingIterator() 此方法以相反的顺序返回此双端队列中的元素的迭代器。
E element() 此方法检索但不删除此双端队列代表的队列的头部。
E getFirst() 此方法检索但不删除此双端队列的第一个元素。
E getLast() 此方法检索但不删除此双端队列的最后一个元素。
boolean isEmpty() 如果此双端队列不包含任何元素,则此方法返回true。
Iterator<E> iterator() 此方法返回此双端队列中的元素的迭代器。
boolean offer(E e) 此方法在此双端队列的末尾插入指定的元素。
boolean offerFirst(E e) 此方法将指定的元素插入此双端队列的前面。
boolean offerLast(E e) 此方法在此双端队列的末尾插入指定的元素。
E peek() 此方法检索但不删除此双端队列表示的队列的头部,如果此双端队列为空,则返回null。
E peekFirst() 此方法检索但不删除此双端队列的第一个元素,如果此双端队列为空,则返回null。
E peekLast() 此方法检索但不删除此双端队列的最后一个元素,如果此双端队列为空,则返回null。
E poll() 此方法检索并删除此双端队列表示的队列的头部,如果此双端队列为空,则返回null。
E pollFirst() 此方法检索并删除此双端队列的第一个元素,如果此双端队列为空,则返回null。
E pollLast() 此方法检索并删除此双端队列的最后一个元素,如果此双端队列为空,则返回null。
E pop() 此方法从此双端队列表示的堆栈中弹出一个元素。
void push(E e) 此方法将元素压入此双端队列表示的堆栈上。
E remove() 此方法检索并删除此双端队列代表的队列的头部。
boolean remove(Object o) 此方法从此双端队列删除指定元素的单个实例。
E removeFirst() 此方法检索并删除此双端队列的第一个元素。
boolean removeFirstOccurrence(Object o) 此方法删除此双端队列中指定元素的首次出现。
E removeLast() 此方法检索并删除此双端队列的最后一个元素。
boolean removeLastOccurrence(Object o) 此方法删除此双端队列中最后一次出现的指定元素。
int size() 此方法返回此双端队列的元素数。
Object[] toArray() 此方法以适当的顺序返回一个数组,其中包含此双端队列中的所有元素。

4 什么是ArrayDeque类

ArrayDeque类提供使用Deque双端队列和可调整大小的数组的便利。它继承了AbstractCollection类并实现了Deque接口。

关于ArrayDeque类的核心要点是:

  • 与Queue不同,ArrayDeque可以从两侧添加或删除元素。
  • ArrayDeque中不允许存放null元素。
  • ArrayDeque是非同步的,意味着ArrayDeque是线程不安全的。
  • ArrayDeque没有容量限制。
  • ArrayDeque比LinkedList和Stack更快。

5 Java ArrayDeque类的层次结构

上图中给出了ArrayDeque类的层次结构。

6 Java ArrayDeque类的语法

public class ArrayDeque<E> extends AbstractCollection<E> implements Deque<E>, Cloneable, Serializable

7 Java ArrayDeque的例子1

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java ArrayDeque的例子
 */
import java.util.*;

public class Demo {

    public static void main(String[] args) {
        //创建ArrayDeque,并添加元素
        Deque<String> deque = new ArrayDeque<String>();
        deque.add("Eric");
        deque.add("Jack");
        deque.add("Rose");
        //遍历元素
        for (String str : deque) {
            System.out.println(str);
        }
    }
}

输出结果为:

Eric
Jack
Rose

8 Java ArrayDeque的例子2

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java ArrayDeque的例子
 */
import java.util.*;

public class Demo {

    public static void main(String[] args) {
        Deque<String> deque=new ArrayDeque<String>();
        deque.offer("eric");
        deque.offer("jack");
        deque.add("rose");
        deque.offerFirst("macy");
        System.out.println("调用offerFirst方法后...");
        for(String s:deque){
            System.out.println(s);
        }
        deque.pollLast();
        System.out.println("调用pollLast()方法后...");
        for(String s:deque){
            System.out.println(s);
        }
    }
}

输出结果为:

调用offerFirst方法后...
macy
eric
jack
rose
调用pollLast()方法后...
macy
eric
jack

 

推荐好课