📅  最后修改于: 2023-12-03 15:31:29.617000             🧑  作者: Mango
Java Deque接口是Java集合框架中的一部分,它代表一种双端队列数据结构,可以在队列的两端快速添加和删除元素。Deque接口继承自Queue接口,因此它也继承了Queue接口定义的添加和删除元素的方法。
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接口支持使用迭代器正向和反向遍历双端队列中的元素,支持向队列中批量添加和删除元素的方法。
Java集合框架中提供了两个实现Deque接口的类:ArrayDeque和LinkedList。其中ArrayDeque是使用了动态数组实现的双端队列,而LinkedList则是使用链表实现的双端队列。具体使用哪个实现类取决于开发者的应用场景和需求。下面是两个实现类的简单介绍:
ArrayDeque实现了Deque接口,它是一个基于动态数组的双端队列,如果需要一个线程安全的Deque,可以使用ConcurrentLinkedDeque。
以下是创建一个ArrayDeque的示例:
Deque<String> deque = new ArrayDeque<String>();
LinkedList实现了Deque接口,它是一个基于双向链表的双端队列,如果需要一个线程安全的双端队列可以使用ConcurrentLinkedDeque。
以下是创建一个LinkedList的示例:
Deque<String> deque = new LinkedList<String>();
Java Deque接口是Java集合框架中的一部分,它提供了一种双端队列数据结构,可以在队列的两端快速添加和删除元素。Java Deque接口定义了一系列方法用于添加、删除、获取和操作双端队列中的元素,同时Java集合框架中也提供了两个实现Deque接口的类:ArrayDeque和LinkedList。开发者可以根据具体应用场景和需求选择适合自己的实现类来使用Deque接口。