数据结构 - QueueDeque 接口
Posted yuanjiangnan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构 - QueueDeque 接口相关的知识,希望对你有一定的参考价值。
简介
队列是一种特殊的线性表。队列有单向队列和双向队列,队列内部结构多大使用数组和链表存储,一般使用数组存储的都会有初试长度和最大长度等,一般使用链表存储没有长度限制。平时在使用中最好不要像队列中插入null(通常也不允许,LinkedList除外),因为null值通常用于poll方法表示当前队列没有元素了,插入null值poll就有歧义。
Queue 接口
public interface Queue<E> extends Collection<E>
Queue继承Collection,它是单向队列,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
Queue 方法
// 添加元素到尾部,队列满时抛IllegalStateException异常
boolean add(E e);
// 添加元素到尾部,队列满时返回false
boolean offer(E e);
// 移除头部元素,队列空时抛NoSuchElementException异常
E remove();
// 移除并返回头部元素,队列为空时返回null
E poll();
// 查询头部元素,队列为空时抛NoSuchElementException异常
E element();
// 查询头部元素,队列为空时返回null
E peek();
Deque 接口
public interface Deque<E> extends Queue<E>
Deque继承自Queue,它是双向队列,Queue只允许取头插尾,而Deque两端都允许插取
Deque 方法
// 添加元素到尾部,队列满时抛IllegalStateException异常
void addFirst(E e);
// 添加元素到头部,队列满时抛IllegalStateException异常
void addLast(E e);
// 添加元素到尾部,队列满时返回false
boolean offerFirst(E e);
// 添加元素到头部,队列满时返回false
boolean offerLast(E e);
// 移除头部元素,队列空时抛NoSuchElementException异常
E removeFirst();
// 移除尾部元素,队列空时抛NoSuchElementException异常
E removeLast();
// 移除并返回头部元素,队列为空时返回null
E pollFirst();
// 移除并返回尾部元素,队列为空时返回null
E pollLast();
// 查询头部元素,队列为空时抛NoSuchElementException异常
E getFirst();
// 查询尾部元素,队列为空时抛NoSuchElementException异常
E getLast();
// 查询头部元素,队列为空时返回null
E peekFirst();
// 查询尾部元素,队列为空时返回null
E peekLast();
// 从头部开始移除第一个o元素,不存在返回false
boolean removeFirstOccurrence(Object o);
// 从尾部开始移除第一个o元素,不存在返回false
boolean removeLastOccurrence(Object o);
AbstractQueue 抽象类
public abstract class AbstractQueue<E> extends AbstractCollection<E>
implements Queue<E>
AbstractQueue 继承AbstractCollection
AbstractQueue 构造函数
protected AbstractQueue() {
}
AbstractQueue 已实现的方法
public boolean add(E e) {
if (offer(e))
return true;
else
throw new IllegalStateException("Queue full");
}
add 实际上调用offer(e),offer(e)返回false时抛异常
public E remove() {
E x = poll();
if (x != null)
return x;
else
throw new NoSuchElementException();
}
remove() 实际上调用poll(),poll()返回null时抛异常
public E element() {
E x = peek();
if (x != null)
return x;
else
throw new NoSuchElementException();
}
element() 实际上调用peek(),peek()返回null时抛异常
public void clear() {
while (poll() != null)
;
}
清空所有元素
public boolean addAll(Collection<? extends E> c) {
if (c == null)
throw new NullPointerException();
if (c == this)
throw new IllegalArgumentException();
boolean modified = false;
for (E e : c)
if (add(e))
modified = true;
return modified;
}
线性集合转化为队列,队列满了一样会抛异常
AbstractQueue抽象类没有实现Queue接口的于offer()、poll()和peek()方法
以上是关于数据结构 - QueueDeque 接口的主要内容,如果未能解决你的问题,请参考以下文章
源码阅读(38):Java中线程安全的QueueDeque结构——LinkedTransferQueue
源码阅读(39):Java中线程安全的QueueDeque结构——LinkedTransferQueue
源码阅读(39):Java中线程安全的QueueDeque结构——LinkedTransferQueue