📜  Java Deque接口(1)

📅  最后修改于: 2023-12-03 15:31:29.617000             🧑  作者: Mango

Java Deque接口

Java Deque接口是Java集合框架中的一部分,它代表一种双端队列数据结构,可以在队列的两端快速添加和删除元素。Deque接口继承自Queue接口,因此它也继承了Queue接口定义的添加和删除元素的方法。

Deque接口定义

Deque接口定义了以下方法:

public interface Deque<E> extends Queue<E> {
    // 在双端队列的头部添加元素,如果队列已满则抛出异常
    void addFirst(E e);
    
    // 在双端队列的尾部添加元素,如果队列已满则抛出异常
    void addLast(E e);
    
    // 在双端队列的头部添加元素,如果队列已满则返回false
    boolean offerFirst(E e);
    
    // 在双端队列的尾部添加元素,如果队列已满则返回false
    boolean offerLast(E e);
    
    // 从双端队列的头部删除并返回一个元素,如果队列为空则抛出异常
    E removeFirst();
    
    // 从双端队列的尾部删除并返回一个元素,如果队列为空则抛出异常
    E removeLast();
    
    // 从双端队列的头部删除并返回一个元素,如果队列为空则返回null
    E pollFirst();
    
    // 从双端队列的尾部删除并返回一个元素,如果队列为空则返回null
    E pollLast();
    
    // 获取双端队列的头部元素但不删除,如果队列为空则抛出异常
    E getFirst();
    
    // 获取双端队列的尾部元素但不删除,如果队列为空则抛出异常
    E getLast();
    
    // 获取双端队列的头部元素但不删除,如果队列为空则返回null
    E peekFirst();
    
    // 获取双端队列的尾部元素但不删除,如果队列为空则返回null
    E peekLast();
    
    // 从双端队列中删除指定的元素,返回是否删除成功
    boolean removeFirstOccurrence(Object o);
    
    // 从双端队列中删除指定的元素,返回是否删除成功
    boolean removeLastOccurrence(Object o);
    
    // 在双端队列头部添加全部元素,如果全部元素添加成功返回true,否则返回false
    boolean addAllFirst(Collection<? extends E> c);
    
    // 在双端队列尾部添加全部元素,如果全部元素添加成功返回true,否则返回false
    boolean addAllLast(Collection<? extends E> c);
    
    // 清空双端队列
    void clear();
    
    // 如果双端队列包含指定元素返回true,否则返回false
    boolean contains(Object o);
    
    // 如果双端队列包含全部指定元素返回true,否则返回false
    boolean containsAll(Collection<?> c);
    
    // 返回迭代器遍历该双端队列的头部到尾部的元素
    Iterator<E> iterator();
    
    // 返回反向迭代器遍历该双端队列的尾部到头部的元素
    Iterator<E> descendingIterator();
    
    // 从双端队列中删除指定集合中的全部元素,返回是否删除成功
    boolean removeAll(Collection<?> c);
    
    // 从双端队列中仅保留指定集合中的元素,返回是否操作成功
    boolean retainAll(Collection<?> c);
    
    // 返回该双端队列中的元素个数
    int size();
    
    // 返回该双端队列的数组表示形式
    Object[] toArray();
    
    // 返回该双端队列的泛型数组表示形式
    <T> T[] toArray(T[] a);
}

Deque接口定义了用于双端队列的操作,既有在队列头部添加和删除元素的方法,也有在队列尾部添加和删除元素的方法。同时Deque接口支持使用迭代器正向和反向遍历双端队列中的元素,支持向队列中批量添加和删除元素的方法。

Deque的实现类

Java集合框架中提供了两个实现Deque接口的类:ArrayDeque和LinkedList。其中ArrayDeque是使用了动态数组实现的双端队列,而LinkedList则是使用链表实现的双端队列。具体使用哪个实现类取决于开发者的应用场景和需求。下面是两个实现类的简单介绍:

ArrayDeque

ArrayDeque实现了Deque接口,它是一个基于动态数组的双端队列,如果需要一个线程安全的Deque,可以使用ConcurrentLinkedDeque。

以下是创建一个ArrayDeque的示例:

Deque<String> deque = new ArrayDeque<String>();
LinkedList

LinkedList实现了Deque接口,它是一个基于双向链表的双端队列,如果需要一个线程安全的双端队列可以使用ConcurrentLinkedDeque。

以下是创建一个LinkedList的示例:

Deque<String> deque = new LinkedList<String>();
总结

Java Deque接口是Java集合框架中的一部分,它提供了一种双端队列数据结构,可以在队列的两端快速添加和删除元素。Java Deque接口定义了一系列方法用于添加、删除、获取和操作双端队列中的元素,同时Java集合框架中也提供了两个实现Deque接口的类:ArrayDeque和LinkedList。开发者可以根据具体应用场景和需求选择适合自己的实现类来使用Deque接口。